Solidity

將 bytes32 轉換為字節

  • February 8, 2022

有沒有一種簡單的方法可以在 Solidity 中bytes32轉換bytes

我正在嘗試獲取在 bytes32 變數中傳遞的字元串的長度,但所有內容都返回 32 大小,這是有道理的。

但顯式轉換似乎不起作用:

bytes memory _tmpUsername = bytes(_username);  // _username is of type bytes32 

這會引發以下錯誤:

Explicit type conversion not allowed from "bytes32" to "bytes storage pointer"

由於solidity@0.4.22,您可以使用abi.encodePacked()它,它返回bytes。例如 ;

contract C { 
 function toBytes(bytes32 _data) public pure returns (bytes) {
   return abi.encodePacked(_data);
 }
}

這是將 bytes32 轉換為字節的一種完全低效的方法(同時刪除右側多餘的零字節)。

function bytes32ToBytes(bytes32 data) internal pure returns (bytes) {
   uint i = 0;
   while (i < 32 && uint(data[i]) != 0) {
       ++i;
   }
   bytes memory result = new bytes(i);
   i = 0;
   while (i < 32 && data[i] != 0) {
       result[i] = data[i];
       ++i;
   }
   return result;
}

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