Solidity
解除安裝。使用結構組裝 - 無法穩定工作
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) }