Solidity

如何將字元串轉換為bytes32?

  • February 3, 2022

如何將 a 轉換string為 a bytes32?有沒有人有一個神奇的功能或圖書館呢?

例如:這是有效的,因為我提供了 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;
   }
}

stringto的轉換bytes32只能使用程序集

引用自:https://ethereum.stackexchange.com/questions/9142