Solidity

在solidity中將字節轉換為十六進製字元串

  • April 26, 2022

在智能合約中,我儲存了一個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));
   }
}

我希望這能回答你的問題。

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