Signatur
Beschreibung
toHex() gibt den Inhalt eines Uint8Array als Hex-String zurück. Jedes Byte wird zu genau zwei Zeichen (0–9, a–f). Führende Nullen bleiben erhalten, ein Byte mit dem Wert 10 wird also zu "0a". Der Ergebnis-String ist deshalb immer doppelt so lang wie das Array.
Typische Einsatzfälle sind die Anzeige von Hashwerten aus crypto.subtle.digest(), das Protokollieren von Binärdaten, das Erzeugen zufälliger Tokens oder IDs mit crypto.getRandomValues() und das Serialisieren von Schlüsseln oder Prüfsummen. Bisher brauchte man dafür eine Hilfskonstruktion wie Array.from(bytes, b => b.toString(16).padStart(2, "0")).join(""). toHex() ersetzt das durch einen einzigen, schnellen Aufruf.
Die Methode hat keine Parameter und verändert das Array nicht. Das Gegenstück ist die statische Methode Uint8Array.fromHex(), die einen Hex-String wieder in Bytes umwandelt. Groß- und Kleinschreibung spielt dabei keine Rolle.
Rückgabewert
2 × byteLength. Bei einem leeren Array ist das Ergebnis "".Beispiele
Grundlegende Umwandlung
const bytes = new Uint8Array([202, 254, 186, 190, 0, 10, 255]);
console.log(bytes.toHex());
SHA-256-Hash eines Textes als Hex-String
const sha256Hex = async (text) => {
const data = new TextEncoder().encode(text);
const hashBuffer = await crypto.subtle.digest("SHA-256", data);
return new Uint8Array(hashBuffer).toHex();
};
console.log(await sha256Hex("hallo"));
Zufälliges Token erzeugen
// 16 zufällige Bytes ergeben ein Token mit 32 Hex-Zeichen
const token = crypto.getRandomValues(new Uint8Array(16)).toHex();
console.log(token.length, token);
Hin- und Rückweg mit fromHex() und Fallback für ältere Laufzeitumgebungen
const toHex = (bytes) =>
typeof bytes.toHex === "function"
? bytes.toHex()
: Array.from(bytes, (b) => b.toString(16).padStart(2, "0")).join("");
const hex = toHex(new TextEncoder().encode("Hi!"));
console.log(hex);
if (Uint8Array.fromHex) {
console.log(new TextDecoder().decode(Uint8Array.fromHex(hex)));
}
// Wichtig · Fallstricke
- Kompatibilität: Die Methode ist neu. Sie wird in Firefox 133+, Safari 18.2+ und Chrome/Edge 140+ unterstützt, ab Node.js 25 (V8 14) ist sie ohne Flag verfügbar. Für ältere Umgebungen solltest du per
typeof Uint8Array.prototype.toHex === "function"prüfen und ein Polyfill wiecore-jsoder einen manuellen Fallback einsetzen. - Die Methode gibt es nur auf
Uint8Array, nicht aufUint16Array,ArrayBufferoderDataView. EinenArrayBuffermusst du zuerst mitnew Uint8Array(buffer)umhüllen. - Die Ausgabe besteht immer aus Kleinbuchstaben. Brauchst du Großbuchstaben, hängst du
.toUpperCase()an. - Ist der zugrunde liegende
ArrayBufferabgetrennt (detached), zum Beispiel nach einemtransfer()oderpostMessagemit Transfer, wirft der Aufruf einenTypeError. - Arbeitet das Array nur auf einem Ausschnitt eines Buffers (
subarray()), werden nur die Bytes dieses Ausschnitts kodiert. - Ein Hex-String belegt doppelt so viel Platz wie die Rohdaten. Für kompaktere Übertragung eignet sich
toBase64()besser.