Solidityでアドレスをintまたはbytesからstringにキャストする方法


  1. アドレスを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進数表記の文字列に変換します。

  1. アドレスを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にキャストする方法です。