Start · Sprachen · JavaScript · Referenz · Uint8Array.prototype.toHex()

Uint8Array.prototype.toHex()

Methode

Wandelt die Bytes eines <code>Uint8Array</code> in einen hexadezimalen String um: zwei Kleinbuchstaben-Hexziffern pro Byte.

seit JavaScript ES2026 (Proposal „Uint8Array to/from Base64“); Fir Kategorie: method-property

Signatur

Uint8Array.prototype.toHex()

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

Typ
string
Beschreibung
Hex-String in Kleinbuchstaben mit der Länge 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());
cafebabe000aff

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"));
d3751d33f9cd5049c4af2b462735457e4d3baf130bcbb87f389e349fbaeb20b9

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);
32 "3f9a0c…" (zufällig)

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)));
}
486921 Hi!

// 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 wie core-js oder einen manuellen Fallback einsetzen.
  • Die Methode gibt es nur auf Uint8Array, nicht auf Uint16Array, ArrayBuffer oder DataView. Einen ArrayBuffer musst du zuerst mit new Uint8Array(buffer) umhüllen.
  • Die Ausgabe besteht immer aus Kleinbuchstaben. Brauchst du Großbuchstaben, hängst du .toUpperCase() an.
  • Ist der zugrunde liegende ArrayBuffer abgetrennt (detached), zum Beispiel nach einem transfer() oder postMessage mit Transfer, wirft der Aufruf einen TypeError.
  • 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.