Remix
“字節”可以作為十六進制取值嗎?
在嘗試在乙太坊上上傳公鑰時,我遇到了一個問題。
鑑於 Solidity 瀏覽器中的以下程式碼,我似乎只能插入
string
值(使用瀏覽器編譯器)。例如,當我“創建”和“設置”值為“0x1234”時,它會輸出:“0x00000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000630783132333400000000000000000000000000000000000000000000000000”
我想要的是類似“0x1234”的東西,但它不是解釋為
string
. 解決方法是使用 bytesN 其中 N 是實際的字節數。但隨後它變成了靜態。有人可以幫忙嗎?contract SimpleStorage { bytes storedData; function set(bytes x) { storedData = x; } function get() constant returns (bytes retVal) { return storedData; } }
是的,代替上面的程式碼,我可以在將字節設置為
bytes2
. 然後我可以輸入“0x12”,它會輸出“0x12”。但是我可以在沒有靜態的情況下做到這一點嗎?contract SimpleStorage { bytes2 storedData; function set(bytes2 x) { storedData = x; } function get() constant returns (bytes2 retVal) { return storedData; } }
嘗試使用 uint 代替:
contract Ballot { uint public key = 0x123A1; // A hex constant }
你會得到:“0x00000000000000000000000000000000000000000000000000000000000123a1”
要使用十六進製字元串創建二進製文件,請使用
web3.toAscii()
; 並轉換回十六進制,使用web3.toHex()
. 像這樣:// 在 JavaScript 中 var txHash = simple.set(web3.toAscii("0x1234"), { from: account }); // 並檢索 var 返回 = simple.get().toHex();