bytes32/uint256 轉換
我希望採用 uint256(十六進製表示法)並將其轉換為 bytes32。出於某種原因,我在轉換後沒有得到相同的值。
function test(uint256 genes1) public returns (bytes32) { bytes32 matron = bytes32(genes1); return matron; }
genes.test.call(0x000063169218f348dc640d171b000208934b5a90189038cb3084624a50f7316c)
返回值—–0x000063169218f348dd1c457e09cc8e86bd11d156019d255fbe00000000000000
假設
genes.test.call(0x000063169218f348dc640d171b000208934b5a90189038cb3084624a50f7316c)
是 JavaScript,您的問題可能是該參數被解釋為 JavaScript 數字,它沒有足夠的精度來處理與您使用的數字一樣大的數字。因此,solidity 呼叫會得到一個不太精確的數字,它會正確地轉換
bytes32
並返回。嘗試引用參數,例如
genes.test.call("0x000063169218f348dc640d171b000208934b5a90189038cb3084624a50f7316c")
或者,您可以傳遞一個 BN 或 BigNumber 實例,例如
genes.test.call(new BigNumber("0x000063169218f348dc640d171b000208934b5a90189038cb3084624a50f7316c"))
您需要的確切語法會有所不同,具體取決於您使用的 web3.js 版本和 BigNumber / BN.js 庫,但由於本機 JavaScript 數字無法處理完整的 256 位,您始終需要將它們作為 BigNumber 處理/BN 對像或以“0x”開頭的十六進製字元串。