Solidity
solidity 十六進制錯誤程式碼
我知道十六進製字元(0 1 2 3 4 5 6 7 8 9 ABCDEF)
當我寫程式碼時
string a= hex"011a" //it is ok
但是當寫這段程式碼時
string a=hex"011aa" // get Error
為什麼?我怎樣才能充分利用這一點
首先,您需要成對添加字元,因為一對十六進制數字是一個字節。
顯示錯誤的行具有不均勻的字元集:
string a=hex"011aa" // get Error
最好這樣做:
string a2 =hex"011a0a";
此外,原因是您需要添加值在 0-127 範圍內(十進制)的字節。因為這些是 Solidity 支持的值可列印 UTF-8 字元。
例如看這張表:https ://www.asciitable.com/
你會看到它從十進制的 0 到 127。在十六進制中,範圍為 0-7F。
如果你試試這個:
string a = hex"aa";
它不會起作用,因為十六進制的十進制值為
aa
170,我們知道它不應該大於127。所以我們限制在十六進制的0-7F範圍內:string min_max_accii_value = hex"00_7f";
在這裡進行自己的轉換:https ://www.rapidtables.com/convert/number/hex-to-decimal.html?x=aa
因此,您可以執行以下操作,並將其分開
_
以使其更具可讀性:string a3 = hex"00_0a_7f";
這裡的文件:https ://docs.soliditylang.org/en/v0.8.11/types.html#unicode-literals
雖然它真的不清楚您要做什麼,但當您這樣做時
string x = hex'something'
,編譯器將查找與您輸入的十六進制數相對應的 UTF-8 字元,因此期待偶數個字元(2 個十六進製字元 = 1字節)。至於你的第二個問題,我不太明白,對不起,你可以……用它來輸出不可列印的字元,我猜?(這就是您對第一個字元串所做的事情,01 和 1a 在 UTF-8 中都是不可列印的字元)但是,是的,您為什麼要這樣做?