Solidity
字節和字節32有什麼區別?
我知道
bytes32
儲存 32 個字節,但bytes
儲存的是什麼?兩者有什麼區別?
Bytes 是一個動態的字節數組。它是字節的簡寫
$$ $$並且您會不時在程式碼中看到將字節視為數組的範例。
myByte[x]
. 它的長度可以為零,您可以執行諸如在末尾附加一個字節之類的操作。 Bytes32 正好是 32 個字節長。只需要一個 32 字節的字來表示一個 bytes32,因為不需要留出任何空間來編碼長度。長度始終為 32。具有 32 字節數據的字節需要額外的編碼來處理可變長度。一個重要的實際區別是,固定長度的 bytes32 可用於函式參數中,以將數據傳入或從合約中返回數據。可變長度字節類型也可以是函式參數,但僅供內部使用(在同一合約內),因為稱為 ABI 的介面不支持可變長度類型。
如果將字節用作函式參數並且合約成功編譯,則可能會出現一些令人迷惑的情況。對於將從外部呼叫的任何函式,始終使用固定長度類型。
希望能幫助到你。
更新:
此時,您可以將可變長度
string
和bytes
從 Web3 傳遞到合約(以及返回),但不能在合約之間傳遞。pragma solidity ^0.4.11; contract VariableLength { event LogTest(bytes b); function test(bytes b) public returns(bool success) { LogTest(b); return true; } }