Solidity
如何將字元串轉換為bytes32?
如何將 a 轉換
string
為 abytes32
?有沒有人有一個神奇的功能或圖書館呢?例如:這是有效的,因為我提供了 32 位作為輸入。但它不適用於 “> 32 位” 字元。
set_txn_hash = a.transact().set("QmVoGzRDscx61k3RHHkLYaMFtxYZi3ps");#32-bit char
function get() returns (stringc value){ return list.get_head_data(); }
但是,如果我需要提供更多字元,例如包含 48 位字元串,這將不起作用。
$$ Q $$我怎樣才能使這項工作?
到目前為止,這對我有用。不確定這是否是最好的方法。
function stringToBytes32(string memory source) public pure returns (bytes32 result) { bytes memory tempEmptyStringTest = bytes(source); if (tempEmptyStringTest.length == 0) { return 0x0; } assembly { result := mload(add(source, 32)) } }
另外,請記住,solidity 中的字元串是 UTF8,因此在將它們轉換為字節後,每個字節不一定是一個字元。
編輯:較短的版本,應該工作相同。
string
不等於bytes32
但等於bytes
,因為它的長度是動態的。所以你可以使用鑄件
bytes B=bytes(S); //S string
例如
contract string_test { function string_tobytes( string s) constant returns (bytes){ bytes memory b3 = bytes(s); return b3; } }
string
to的轉換bytes32
只能使用程序集