Assembly

為什麼 mstore 在這裡不起作用?(元件)

  • July 21, 2018
function debug() returns (bytes) {
       bytes memory ret = new bytes(6);
       bytes memory word = new bytes(6);
       word = hex"61626f757400";
       assembly {
           mstore(add(ret, 32), word)
       }
       return ret;
}

返回 0x000000000000,期望的結果返回 0x61626f757400

請注意字節數組的長度ret在記憶體中的位置。與 相同,所以當你這樣做時,你實際上是在數組中數據的開頭將數組長度的位置儲存在記憶體中。這是您嘗試執行的正確版本:ret``word``mstore(add(ret, 32), word)``word``ret

function debug() view returns (bytes) {
   bytes memory ret = new bytes(6);
   bytes memory word = new bytes(6);
   word = hex"61626f757400";
   assembly {
       mstore(add(ret, 32), mload(add(word, 32)))
   }
   return ret;
}

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