Web3js
從 web3.toAscii() 轉換中刪除尾隨零
我有一個返回 bytes32 類型變數的契約,我目前正在使用 truffle 和 javascript 對其進行測試。原始數據
['Roberto', 'Juan', 'Andrea']
這個數組是我從契約中得到的回應:
[ '0x526f626572746f00000000000000000000000000000000000000000000000000', '0x4a75616e00000000000000000000000000000000000000000000000000000000', '0x416e647265610000000000000000000000000000000000000000000000000000' ]
這是我的程式碼
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);
在每個元素上使用 web3.toAscii() 方法來獲得一個人類友好的字元串會產生以下結果:
[ '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' ]
有沒有辦法刪除原始數據附帶的額外字元?
web3.toUtf8()
會為你施展魔法
web3.toAscii
不會為你這樣做。這是原始程式碼(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); }
但沒有人阻止你創建自己的函式來防止這種行為。例子:
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 應該解決這個問題參考使用
web3.utils.hexToUtf8