Signatur
Beschreibung
setFromHex() liest einen hex-kodierten String (je zwei Zeichen 0-9, a-f oder A-F pro Byte) und schreibt die dekodierten Bytes ab Index 0 in das Uint8Array, auf dem die Methode aufgerufen wird. Anders als die statische Methode Uint8Array.fromHex() wird kein neues Array angelegt. Die Bytes landen in einem vorhandenen Puffer.
Das lohnt sich vor allem, wenn Sie Speicher wiederverwenden möchten, zum Beispiel in Schleifen, in Protokoll-Parsern oder beim Befüllen eines größeren ArrayBuffer an einer bestimmten Stelle. Dafür erzeugen Sie mit subarray() eine Ansicht ab dem gewünschten Offset und rufen setFromHex() auf dieser Ansicht auf.
Ist das Ziel-Array kleiner als die Menge der dekodierten Daten, hört die Methode auf, sobald das Array voll ist. Dabei gibt es keinen Fehler. Der Rückgabewert zeigt, wie weit dekodiert wurde: read ist die Anzahl der gelesenen Hex-Zeichen, written die Anzahl der geschriebenen Bytes. So können Sie Daten in Stücken verarbeiten.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $string Pflicht | string | Hexadezimaler String mit gerader Länge. Groß- und Kleinschreibung sind erlaubt. Leerzeichen, Präfixe wie 0x und Trennzeichen sind nicht erlaubt. |
Rückgabewert
read (Anzahl der gelesenen Hex-Zeichen, immer 2 × written) und written (Anzahl der ins Array geschriebenen Bytes).Beispiele
Hex-String in einen vorhandenen Puffer dekodieren
const bytes = new Uint8Array(8);
const result = bytes.setFromHex("cafed00d");
console.log(result);
console.log(bytes);
Ziel-Array zu klein – Dekodierung stoppt ohne Fehler
const small = new Uint8Array(2);
const { read, written } = small.setFromHex("cafed00d");
console.log(read, written);
console.log(small);
// Rest verarbeiten:
console.log("Noch offen:", "cafed00d".slice(read));
An einer bestimmten Stelle schreiben (per subarray)
// Paket: 2 Byte Header + 4 Byte Nutzdaten
const packet = new Uint8Array(6);
packet[0] = 0x01; // Version
packet[1] = 0x04; // Länge
packet.subarray(2).setFromHex("DEADBEEF");
console.log(packet);
Fehlerbehandlung und Feature-Erkennung
const decodeInto = (target, hex) => {
if (typeof Uint8Array.prototype.setFromHex !== "function") {
throw new Error("setFromHex wird nicht unterstützt");
}
try {
return target.setFromHex(hex);
} catch (err) {
console.error(`${err.name}: ungültiger Hex-String`);
return null;
}
};
const buf = new Uint8Array(4);
decodeInto(buf, "abz1"); // 'z' ist ungültig
console.log(buf); // Bytes vor dem Fehler wurden bereits geschrieben
decodeInto(buf, "abc"); // ungerade Länge
// Wichtig · Fallstricke
- Fehler: Die Methode wirft einen
SyntaxError, wenn der String Zeichen außerhalb des Hex-Alphabets enthält (auch Leerzeichen oder0x) oder wenn seine Länge ungerade ist. Ist das Argument kein String, gibt es einenTypeError. Es findet keine automatische Umwandlung statt. - Teilweises Schreiben: Taucht ein ungültiges Zeichen mitten im String auf, stehen die Bytes davor bereits im Array. Das Array ist also nicht unverändert. Bei ungerader Länge wird dagegen nichts geschrieben, weil die Länge vorab geprüft wird.
- Kein Überlauf-Fehler: Ein zu kleines Ziel-Array schneidet die Daten stillschweigend ab. Vergleichen Sie deshalb
readmitstring.length, wenn Sie Vollständigkeit brauchen. - Die Methode gibt es nur auf
Uint8Array, nicht auf anderen TypedArrays. Die Bytes landen immer ab Index 0 des Arrays bzw. der Ansicht. - Kompatibilität: Die Methode ist recht neu (Proposal „ArrayBuffer base64“, ES2026). Ältere Umgebungen brauchen eine Feature-Erkennung oder ein Polyfill, z. B.
core-js.