在 Solidity 中将 bytes3 转换为字符串

Convert bytes3 to string in Solidity

我需要创建将 byte3 转换为字符串的函数。 在我的合同中,数据被保存到一个状态变量中。

我想为用户转换变量内容

这是我的功能:

function convertByteToString() public view returns(string memory){
    string memory result = string(symbol);
    return result;
}

但是我得到一个编译器错误:

TypeError: Explicit type conversion not allowed from "bytes3" to "string memory".

如何解决这个错误?

要将 bytes3 转换为 string,您必须使用 abi.encodePacked(bytes3 parameter) 并且必须将此结果转换为字符串。

用这个改变你的功能:

function convertByteToString(bytes3 symbol) public view returns(string memory){
  string memory result = string(abi.encodePacked(symbol));
  return result;
}

只能将 dynamic-length 字节数组(Solidity 类型 bytes)类型转换为字符串,但您传递的是 fixed-length 字节数组(Solidity 类型 bytes3).

使用abi.encode()bytes3转换为bytes

pragma solidity ^0.8;

contract MyContract {
    bytes3 symbol = 0x455448; // hex-encoded ASCII value of "ETH"

    function convertByteToString() public view returns(string memory){
        string memory result = string(abi.encode(symbol));
        return result;
    }
}