在Java中 uint256 如何转 uint160

想实现的合约功能:address(uint160(uint256(keccak256(data))));

uint256这个步骤的结果是:79877015141907363163491858808961649055441649173890591412945755900581091402136

合约中uint256强转uint160结果是:618422437003223517566768319887535941755707515288

对应Java的有哪些方法可以操作呢。 使用右移方法小额数可以进行操作,大额的用BigInteger.shiftRight()计算和合约不一致。

BigInteger bigInteger2 = BigInteger.valueOf(65535);
long h = bigInteger2.longValue() >>> 8;

BigInteger bigInteger1 = uint256.shiftRight(100);

如何在Java中将uint256强转uint160呢,最后在将uint160转换为address

请先 登录 后评论

最佳答案 2023-06-02 09:58

        BigInteger n = new BigInteger("79877015141907363163491858808961649055441649173890591412945755900581091402136");
        String hex = n.toString(16);
        System.out.println("0x" + hex.substring(hex.length() - 40));
请先 登录 后评论

其它 0 个回答

  • 0 关注
  • 0 收藏,2029 浏览
  • lfhuang 提出于 2023-06-01 17:42