Gas

將 msg.data 轉換為 int128 的最省氣的方法?

  • August 21, 2018

有沒有更省油的方法可以轉換msg.dataint128?

這是一些建議的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 ABImsg.data進行編碼。

引用自:https://ethereum.stackexchange.com/questions/56968