是否还有更有效的方法将msg.data转换为int128?
以下是一些建议的推动因素:
function bytesToBytes16(bytes b, uint offset) private pure returns (bytes16) {
bytes16 out;
for (uint i = 0; i < 16; i++) {
out |= bytes16(b[offset + i] & 0xFF) >> (i * 8);
}
return out;
}
...
int128 id = int128(bytesToBytes16(msg.data, 0));有什么可供选择的汇编程序吗?
发布于 2018-08-21 20:58:08
这应该能行
function foo(bytes m) public pure returns (uint128) {
bytes32 b;
assembly {
b := mload(add(m, 0x10))
}
return uint128(b);
}这样做的目的是加载数据前面的16个字节,并使用从bytes32到uint128的截断来丢弃第一个字节。
还要注意,msg.data包含函数签名,并使用坚固性ABI进行编码。
https://ethereum.stackexchange.com/questions/56968
复制相似问题