在 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;
}
}
我需要创建将 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;
}
}