Solidity

誰能解釋一下如何將字節記憶體轉換為可靠的地址類型

  • May 6, 2020

當我使用下面的函式將字節記憶體轉換為地址時,這工作正常。

假設函式的輸入是 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 個最低有效字節)。

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