Javascript
字元串到字節錯誤
我正在嘗試獲取使用者輸入字元串並將它們轉換
bytes32
為bytes5
Solidity 5.11 中內置的契約,我分別嘗試了 32 和 5 個字元長的隨機字元串,但是它們不起作用,是否有 web3 的內置函式將字元串轉換為字節( 32 或 5) likeweb3.utils.fromAscii
可用於從字元串生成適當的地址?console.log(addressing("address"); console.log(bitify32("data")); console.log(bitify5("key")); function addressing(input) { let zeros = "0"; let input = web3.utils.fromAscii(input); if (input.length < 42) { let remainder = 32-input.length; for(let i = remainder-1; i > 0; i--) { zeros += "0"; } } let inputZerod = input+zeros; return inputZerod; } function bytify32(input) { let zeros = "0"; let input = web3.utils.fromAscii(input); if (input.length < 32) { let remainder = 32-input.length; for(let i = remainder-1; i > 0; i--) { zeros += "0"; } } let inputZerod = input+zeros; return inputZerod; }
pragma solidity ^0.5.11; contract bytesTest{ mapping(address => BytesStruct) testBytes; struct BytesStruct{ address stringAddress; bytes32 string1; bytes5 string2; } function getByteStrings(address _stringAddress) view public returns(bytes32, bytes5){ return(testBytes[_stringAddress].string1, testBytes[_stringAddress].string2); } function addByteString(address _stringAddress, bytes32 _string1, bytes5 _string2) public{ testBytes[_stringAddress].string1 = _string1; testBytes[_stringAddress].string2 = _string2; } }
我只是想了解為什麼 bytes32 和 5,如果每個字元都是一個字節,則分別需要長度為 66 和 11 的字元串
我將解釋
bytes32
:為了
bytes32
從 web3.js 發送到智能合約函式,您需要提供一個"0x"
以 64 個十六進製字元開頭的字元串。為什麼是64?因為每個字元代表4位(
f
-最高-代表1111
)。由於每個字節由 8 位組成,因此需要 64 個十六進製字元才能表示 32 個字節。
包括
"0x"
前綴,您會得到一個 66 個字元的字元串。