Gas
將 msg.data 轉換為 int128 的最省氣的方法?
有沒有更省油的方法可以轉換
msg.data
成int128
?這是一些建議的impl:
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));
任何可用的彙程式序替代品?
這應該工作
function foo(bytes m) public pure returns (uint128) { bytes32 b; assembly { b := mload(add(m, 0x10)) } return uint128(b); }
這個想法是載入我們數據之前的 16 個字節,並使用從 bytes32 到 uint128 的截斷來丟棄那些第一個字節。
另請注意,它包含函式簽名並使用solidity ABI
msg.data
進行編碼。