Conversión de bytes 8,16,32 a String

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!

Respuestas (2)

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.toAsciitodaví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.

Cómo convertir un bytes32 a cadena