Solidity

字節和字節32有什麼區別?

  • January 13, 2018

我知道bytes32儲存 32 個字節,但bytes儲存的是什麼?兩者有什麼區別?

Bytes 是一個動態的字節數組。它是字節的簡寫

$$ $$並且您會不時在程式碼中看到將字節視為數組的範例。myByte[x]. 它的長度可以為零,您可以執行諸如在末尾附加一個字節之類的操作。 Bytes32 正好是 32 個字節長。只需要一個 32 字節的字來表示一個 bytes32,因為不需要留出任何空間來編碼長度。長度始終為 32。具有 32 字節數據的字節需要額外的編碼來處理可變長度。

一個重要的實際區別是,固定長度的 bytes32 可用於函式參數中,以將數據傳入或從合約中返回數據。可變長度字節類型也可以是函式參數,但僅供內部使用(在同一合約內),因為稱為 ABI 的介面不支持可變長度類型。

如果將字節用作函式參數並且合約成功編譯,則可能會出現一些令人迷惑的情況。對於將從外部呼叫的任何函式,始終使用固定長度類型。

希望能幫助到你。

更新:

此時,您可以將可變長度stringbytes從 Web3 傳遞到合約(以及返回),但不能在合約之間傳遞。

pragma solidity ^0.4.11;

contract VariableLength {

   event LogTest(bytes b);

   function test(bytes b) public returns(bool success) {
       LogTest(b);
       return true;
   }
}

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