Solidity
在solidity中將字節轉換為十六進製字元串
在智能合約中,我儲存了一個
bytes4
值:0xa22cb465
. 我想將此值解析為字元串:
string memory test = "0xa22cb465"
我只是偶然發現了有關如何將字節轉換為字元串而不是解析的解釋。在此先感謝您的幫助!
如果我對“解析”的理解正確,您的意思是從整數表示(即,
bytes4 data = 0xa22cb465;
)轉換為十六進制的字元串表示(即,string memory test = "0xa22cb465"
)。在這種情況下,您需要編寫一個函式來實際進行轉換。這是一個使用字節輸入和帶有“0x”前綴的base 16字元串輸出的範例。
// SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.8.0; contract Example { bytes4 public data = 0xa22cb465; function howToUseIt() public view returns (string memory) { return iToHex(abi.encodePacked(data)); } function iToHex(bytes memory buffer) public pure returns (string memory) { // Fixed buffer size for hexadecimal convertion bytes memory converted = new bytes(buffer.length * 2); bytes memory _base = "0123456789abcdef"; for (uint256 i = 0; i < buffer.length; i++) { converted[i * 2] = _base[uint8(buffer[i]) / _base.length]; converted[i * 2 + 1] = _base[uint8(buffer[i]) % _base.length]; } return string(abi.encodePacked("0x", converted)); } }
我希望這能回答你的問題。