function forward(bytes calldata _payload) external
比如传 address 和uint256 类型的数据然后转成bytes数据传进去
,然后在方法里解析 _payload 并拿到这2这个数据。
参数可以直接把地址和 整数的 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]);