Solidity
誰能解釋一下如何將字節記憶體轉換為可靠的地址類型
當我使用下面的函式將字節記憶體轉換為地址時,這工作正常。
假設函式的輸入是 0X000000000000000000000000 4af3246b4fff356261136f113411cb187134D675
我得到輸出0x4af3246b4fff356261136f113411cb187134D675
function bytesToAddress(bytes memory bys) public pure returns (address addr) { assembly { addr := mload(add(add(bys, 32), 0)) } }
誰能解釋一下,到底發生了什麼?
表達式
add(bys, 32)
:返回指向實際數據的指針,該指針在
bys
數組的前 32 個字節之後開始(前 32 個字節包含bys
數組的長度)。表達式
mload(x)
:載入指向的數據
x
,所以你也可以使用mload(add(bys, 32))
,因為這樣做沒有附加值x + 0
。表達式
addr := y
:將值儲存
y
到變數addr
中(在您的情況下,因為值y
是 32 字節長,類型addr
是 20 字節長,所以只儲存 20 個最低有效字節)。