5 如何传多参数进去,然后调用解析里面的数据

function forward(bytes calldata _payload) external

比如传 address 和uint256 类型的数据然后转成bytes数据传进去

,然后在方法里解析 _payload 并拿到这2这个数据。

请先 登录 后评论

最佳答案 2021-08-29 10:30

参数可以直接把地址和 整数的 16 进制拼在一起。 例如: 0x000000000000000000000000000000000000abcd02 作为 payload, 其中0x000000000000000000000000000000000000abcd是地址,02 是整数的 16 进制(一定要是双位数)。

_payload 转换为地址,可以先把前 20 位取来:

function toBytes20(bytes calldata _payload) private pure returns (bytes20) {
    bytes20 out;
    for (uint i = 0; i < 20; i++) {
      out |= bytes20(_payload[i] & 0xFF) >> (i * 8);
    }
    return out;
  }

然后转换为地址:

address(toBytes20(_payload))

转换为整型,做一下数据拼接, 类似这样:

uint num = uint8(exData[21]) * 65536 + uint8(exData[22]) * 256 + uint8(exData[23]);

请先 登录 后评论

其它 0 个回答

  • 1 关注
  • 1 收藏,2368 浏览
  • DDY 提出于 2021-08-28 17:36