Solidity
使用字元串類型還是 bytes32?
string
使用數據類型bytes32
來表示文本數據有什麼好處。當我將資料結構從 切換bytes32
到string
.
為什麼
string
而不是bytes32
?用於
string
長度超過 32 個字節的任意長度字元串 (UTF-8) 數據。前端可以使用web3.toAscii或 UTF-8等方法更輕鬆地解碼長字元串(當問題得到修復時),而不是實現 UTF-8 解碼一系列bytes32
.根據經驗,
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 中有目前限制(例如不能從函式返回到合約)。