Solidity
如何在智能合約中將數字保存為 bytes16 並在 javascript 中檢索數字?
我有以下智能合約來澄清這個問題。
pragma solidity ^0.4.17; contract Test { bytes16 number; function getNumber() public view returns(bytes16) { return number; } function setNumber(bytes16 _number) public { number = _number; } }
因此,我使用 javascript 將數字轉換為十六進製字元串,例如
let hex = ‘0x’ + (3456).toString(16)
wherehex
is0xd80
。然後我將值作為參數傳遞給setNumber
. 挑戰是當我呼叫getNumber
我收到的回報是0x0d800000000000000000000000000000
。像 28 個零被附加到末尾。解析這個給出了錯誤的值。我是這樣解析的let num = parseInt(‘0x0d800000000000000000000000000000’, 16)
。我明白了1.7944577943096364e+37
。如何從這個 ‘0x0d800000000000000000000000000000’ 中獲得正確的值,或者如何在沒有額外零位的情況下將數字保存為字節 16。
你需要留下墊子。當您通過
0xd80
時,它會作為編碼過程的一部分被正確填充(佔用 16 個字節)。let argument = "0x" + web3.padLeft("d80", 32);
這應該給你
0x00000000000000000000000000000D80