Solidity

解除安裝。使用結構組裝 - 無法穩定工作

  • October 2, 2020
struct S { 
  uint128 a; 
  uint128 b; 
}
S test1;
function assemblyStorage() public returns (uint a, uint b, uint c, uint d, uint f, uint g){
 test1 = S(5,10);
 assembly {
    a:=sload(0)
 }
}

正如我們所看到的,test1現在將佔據第一個插槽。而不是第二個,因為可以打包變數……

現在,為什麼sload(0)返回這樣的東西3402823669209384634633746074317682114565,我怎樣才能返回 5 和 10 ?

正如您所說,該結構已打包。由於sload(0)返回 32 個字節,它返回整個結構。

要訪問結構的各個部分,請使用位移位和遮罩。

assembly {
   let w := sload(0)
   a := and(w, 0xffffffffffffffffffffffffffffffff)
   b := shr(128, w)
}

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