- アドレスをintからstringにキャストする方法:
function addressToIntString(address _address) public pure returns (string memory) {
bytes32 value = bytes32(uint256(_address));
bytes memory alphabet = "0123456789abcdef";
bytes memory str = new bytes(42);
str[0] = "0";
str[1] = "x";
for (uint256 i = 0; i < 20; i++) {
str[2 + i * 2] = alphabet[uint8(value[i + 12] >> 4)];
str[3 + i * 2] = alphabet[uint8(value[i + 12] & 0x0f)];
}
return string(str);
}
この関数は、アドレスをuint256にキャストし、その後、16進数表記の文字列に変換します。
- アドレスをbytesからstringにキャストする方法:
function addressToBytesString(address _address) public pure returns (string memory) {
bytes memory str = new bytes(42);
str[0] = "0";
str[1] = "x";
for (uint256 i = 0; i < 20; i++) {
uint8 b = uint8(uint256(_address) / (2(8*(19-i))));
uint8 hi = b / 16;
uint8 lo = b % 16;
str[2 + i * 2] = byte(hi + (hi < 10 ? 0x30 : 0x57));
str[3 + i * 2] = byte(lo + (lo < 10 ? 0x30 : 0x57));
}
return string(str);
}
この関数は、アドレスをバイト列に変換し、その後、16進数表記の文字列に変換します。
これらの関数を使用することで、Solidityでアドレスをintまたはbytesからstringにキャストすることができます。必要に応じて、他のコード内でこれらの関数を呼び出すことができます。
以上が、Solidityでアドレスをintまたはbytesからstringにキャストする方法です。