Gibt es eine Möglichkeit, die Zeichen, aus denen Bytes bestehen, in eine Zeichenfolge umzuwandeln?

Wenn ich zum Beispiel eine bytes4-Variable habe, die "0xabcd1122" ist, gibt es eine Möglichkeit, dies in eine Zeichenfolge mit dem Wert "abcd1122" umzuwandeln? Ich frage, weil ich einem Token-Symbol eine eindeutige Kennung zuweisen möchte, aber wenn ich Bytes in eine Zeichenfolge konvertiere, passt das Ergebnis nicht zur UTF-8-Codierung, wodurch die Ausgabe verstümmelt wird. Wenn das Konvertieren der Zeichen, aus denen die bytes-Variable besteht, in eine Zeichenfolge nicht funktioniert, hat jemand eine Idee, eine eindeutige Kennung als Zeichenfolge zu generieren?

Antworten (1)

Hier ist eine Funktion dafür:

function getHexString(bytes4 value) pure public returns (string) {
    bytes memory result = new bytes(8);
    string memory characterString = "0123456789abcdef";
    bytes memory characters = bytes(characterString);
    for (uint8 i = 0; i < 4; i++) {
        result[i * 2] = characters[uint256((value[i] & 0xF0) >> 4)];
        result[i * 2 + 1] = characters[uint256(value[i] & 0xF)];
    }
    return string(result);
}

Sie können es hier versuchen: https://ethfiddle.com/726_Ju8bse .