Sé que se ha preguntado muchas veces, pero la publicación más reciente sobre esto que pude encontrar tenía aproximadamente 1 año. A mí me parece muy posible que las cosas hayan cambiado desde entonces. Entonces, mi pregunta: ¿hay una manera fácil de convertir bytes8/16/32 en un valor de cadena?
Aquí está el problema al que me enfrento ahora. El contrato A toma una entrada de usuario por transacción como una variable bytes8/16/32. El contrato lo pasa al Contrato B y lo almacena allí. Mi función getter en el Contrato B devuelve esta variable Bytes8/16/32. Entonces, el contrato A llama a la función de obtención de B si es necesario y recupera con éxito la variable de bytes. Ahora simplemente quiero volver a convertirlo en una cadena legible y ponerlo en la pantalla de forma decodificada :) ¿Alguien tiene una idea? ¡Muchas gracias!
Supongo que está invocando su contrato Ethereum desde JavaScript. Si ese es el caso, probablemente necesitesweb3.toAscii()
var str = web3.toAscii("0x657468657265756d000000000000000000000000000000000000000000000000");
console.log(str); // "ethereum"
Si necesita una cadena legible es solo para la interfaz web y está usando web3.js, puede usar:
var str = web3.toUtf8("0x657468657265756d000000000000000000000000000000000000000000000000");
console.log(str); // "ethereum"
web3.toAscii
todavía puede devolver algunos caracteres no deseables, y dado que UTF-8 es el más utilizado, sugiero elweb3.toUtf8
Otra forma es intentar analizar los bytes32 en una cadena legible dentro de su contrato. para hacerlo, consulte esta pregunta que tiene la mejor respuesta.