Solidity

將 bytes32 轉換為地址

  • April 12, 2022

有沒有一種簡單的方法可以將 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 文件

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