Solidity
將 bytes32 轉換為字節
有沒有一種簡單的方法可以在 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; }