Konvertierung von Bytes 8,16,32 in String

Ich weiß, es wurde schon oft gefragt, aber der neueste Beitrag dazu, den ich finden konnte, war etwa 1 Jahr alt. Mir erscheint es durchaus möglich, dass sich seitdem etwas geändert hat. Also meine Frage: Gibt es eine einfache Möglichkeit, bytes8/16/32 in einen String - Wert umzuwandeln?

Hier ist das Problem, mit dem ich gerade konfrontiert bin. Vertrag A akzeptiert eine Benutzereingabe pro Transaktion als Bytes8/16/32-Variable. Der Vertrag übergibt sie an Vertrag B und speichert sie dort. Meine Getter-Funktion in Vertrag B gibt diese Bytes8/16/32-Variable zurück. Vertrag A ruft also bei Bedarf die Getter-Funktion von B auf und erhält die Bytes-Variable erfolgreich zurück. Jetzt möchte ich es einfach wieder in einen lesbaren String umwandeln und dekodiert auf den Bildschirm bringen :) Hat jemand eine Idee? Danke vielmals!

Antworten (2)

Ich gehe davon aus, dass Sie Ihren Ethereum-Vertrag über JavaScript aufrufen. Wenn das der Fall ist, müssen Sie wahrscheinlichweb3.toAscii()

var str = web3.toAscii("0x657468657265756d000000000000000000000000000000000000000000000000");
console.log(str); // "ethereum"

Wenn Sie eine lesbare Zeichenfolge nur für die Webschnittstelle benötigen und web3.js verwenden, können Sie Folgendes verwenden:

var str = web3.toUtf8("0x657468657265756d000000000000000000000000000000000000000000000000");
console.log(str); // "ethereum"

web3.toAsciikann immer noch einige unerwünschte Zeichen zurückgeben, und da UTF-8 am häufigsten verwendet wird, schlage ich die vorweb3.toUtf8

Eine andere Möglichkeit besteht darin, zu versuchen, die bytes32 in eine lesbare Zeichenfolge in Ihrem Vertrag zu zerlegen. Um dies zu tun, beziehen Sie sich bitte auf diese Frage, es hat die beste Antwort.

So konvertieren Sie ein bytes32 in einen String