Ich habe einen Vertrag, der eine Variable vom Typ bytes32 zurückgibt, und ich teste ihn derzeit mit Trüffel und Javascript. Die Originaldaten
['Roberto', 'Juan', 'Andrea']
Dieses Array ist, was ich als Antwort von meinem Vertrag bekomme:
[ '0x526f626572746f00000000000000000000000000000000000000000000000000',
'0x4a75616e00000000000000000000000000000000000000000000000000000000',
'0x416e647265610000000000000000000000000000000000000000000000000000' ]
Und das ist mein Code
let cands = [];
let length = Number(await voting.candidateListLength());
for (let i = 0; i < length; i++)
cands.push(web3.toAscii(await voting.candidateList(i)));
console.log(cands);
Die Verwendung der Methode web3.toAscii() für jedes Element, um eine benutzerfreundliche Zeichenfolge zu erhalten, erzeugt Folgendes:
[ 'Roberto\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000',
'Juan\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000',
'Andrea\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' ]
Gibt es eine Möglichkeit, die zusätzlichen Zeichen zu entfernen, die mit den Originaldaten einhergehen?
web3.toUtf8()
wird die Magie für Sie tun
Das web3.toAscii
wird Ihnen nicht gelingen. Dies ist der Originalcode ( ref ):
var str = "";
var i = 0, l = hex.length;
if (hex.substring(0, 2) === '0x') {
i = 2;
}
for (; i < l; i+=2) {
var code = parseInt(hex.substr(i, 2), 16);
str += String.fromCharCode(code);
}
aber niemand hindert Sie daran, Ihre eigene Funktion zu erstellen, um dieses Verhalten zu verhindern. Beispiel:
function toAscii(hex) {
var str = "";
var i = 0, l = hex.length;
if (hex.substring(0, 2) === '0x') {
i = 2;
}
for (; i < l; i+=2) {
var code = parseInt(hex.substr(i, 2), 16);
if(code != 0) {
str += String.fromCharCode(code);
}
}
return str;
}
web3 1.0 sollte dieses Problem beheben ref usingweb3.utils.hexToUtf8
web3.utils.hexToUtf8
gute Stimmung
bytes32
und nichtstring
?web3.toAscii
(in diesem Fall könnten Sie das einfach auf der Client-Seite loswerden ).Robert C.