Solidity String转换工具
相对openzeppelin,弥补一下没有的:bytes,address,uint转string
pragma solidity ^0.8.0;
contract String{
//==============================string工具函数==============================
function strConcat(string memory _a, string memory _b) internal returns (string memory){
bytes memory _ba = bytes(_a);
bytes memory _bb = bytes(_b);
string memory ret = new string(_ba.length + _bb.length);
bytes memory bret = bytes(ret);
uint k = 0;
for (uint i = 0; i < _ba.length; i++) bret[k++] = _ba[i];
for (uint i = 0; i < _bb.length; i++) bret[k++] = _bb[i];
return string(ret);
}
function toString(address account) public pure returns (string memory) {
return toString(abi.encodePacked(account));
}
function toString(uint256 value) public pure returns (string memory) {
return toString(abi.encodePacked(value));
}
function toString(bytes32 value) public pure returns (string memory) {
return toString(abi.encodePacked(value));
}
function toString(bytes memory data) public pure returns (string memory) {
bytes memory alphabet = "0123456789abcdef";
bytes memory str = new bytes(2 + data.length * 2);
str[0] = "0";
str[1] = "x";
for (uint i = 0; i < data.length; i++) {
str[2 + i * 2] = alphabet[uint(uint8(data[i] >> 4))];
str[3 + i * 2] = alphabet[uint(uint8(data[i] & 0x0f))];
}
return string(str);
}
}