Solidity
將 bytes32 轉換為地址
有沒有一種簡單的方法可以將 bytes32 轉換為
0xca35b7d915458ef540ade6068dfe2f44e8fa733c
地址?bytes32 data = "0xca35b7d915458ef540ade6068dfe2f44e8fa733c";
我嘗試使用它進行投射,
address(data)
但沒有奏效。我也在這裡看到了這個解決方案,但它只適用於bytes
而不是bytes32
.這是我需要的功能:
function bytes32ToAddress(bytes32 input) public pure returns(address){ // convert input to address return ...; }
這工作正常。也許您實際上在程式碼中包含了單引號?如果是這樣,請刪除它們。
pragma solidity ^0.4.24; contract Test { function test(bytes32 data) external pure returns (address) { return address(data); } }
對於solidity 0.5.x,您可以使用
pragma solidity ^0.5.0; contract Test { function test(bytes32 data) external pure returns (address) { return address(uint160(uint256(data))); } }
首先將 bytes32 轉換為 uint256,然後轉換為 uint160(20 字節),最後轉換為地址,這使用大端序。
如果你想使用小端,你應該使用
address(uint160(bytes20(b)))
更多資訊:solidity 文件