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?
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 .