Solidity

使用字元串類型還是 bytes32?

  • February 8, 2022

string使用數據類型bytes32來表示文本數據有什麼好處。當我將資料結構從 切換bytes32string.

為什麼string而不是bytes32

用於string長度超過 32 個字節的任意長度字元串 (UTF-8) 數據。前端可以使用web3.toAscii或 UTF-8等方法更輕鬆地解碼長字元串(當問題得到修復時),而不是實現 UTF-8 解碼一系列bytes32.

來自Solidity 文件:

根據經驗,bytes用於任意長度的原始字節數據和 string任意長度的字元串 (UTF-8) 數據。如果您可以將長度限制為一定數量的字節,請始終使用 to 之一,bytes1因為 bytes32它們便宜得多。

字元串文字也可能有用或方便:

字元串文字用雙引號或單引號(“foo”或“bar”)編寫…

字元串文字支持轉義字元,例如 \n、\xNN 和 \uNNNN。\xNN 採用十六進制值並插入適當的字節,而 \uNNNN 採用 Unicode 程式碼點並插入 UTF-8 序列。


為什麼bytes32而不是string

為什麼 Solidity 範例使用 bytes32 類型而不是字元串?

bytes32使用較少的氣體,因為它適合 EVM 的一個單詞,並且string是動態大小的類型,在 Solidity 中有目前限制(例如不能從函式返回到合約)。

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