Bytes32

bytes32/uint256 轉換

  • December 2, 2018

我希望採用 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”開頭的十六進製字元串。

引用自:https://ethereum.stackexchange.com/questions/63399