logo hsb.horse
← Zur Snippets-Übersicht

Snippets

Uint8Array Hilfsfunktionen

Ein TypeScript-Wrapper zur Vereinfachung von new Uint8Array-Aufrufen. Unterstützt Arrays, ArrayBuffer und Initialisierung nach Länge.

Veröffentlicht: Aktualisiert:

Beim Arbeiten mit Binärdaten in WebCrypto API und ähnlichen Kontexten ruft man new Uint8Array häufig auf. Die lange Syntax jedes Mal zu schreiben ist mühsam, also habe ich einen Wrapper für kompaktere Nutzung erstellt.

Code

const BYTE_LENGTH = "byteLength";
export function toU8Array(length: number): Uint8Array;
export function toU8Array(
array: ArrayLike<number> | ArrayBufferLike
): Uint8Array;
export function toU8Array(
buffer: ArrayBufferLike,
byteOffset?: number,
length?: number
): Uint8Array;
export function toU8Array(
arg1: number | ArrayLike<number> | ArrayBufferLike,
arg2?: number,
arg3?: number
): Uint8Array {
return typeof arg1 === "number"
? new Uint8Array(arg1)
: BYTE_LENGTH in arg1
? new Uint8Array(arg1, arg2, arg3)
: new Uint8Array(arg1);
}

Nutzungsbeispiele

Mit angegebener Länge initialisieren

const arr = toU8Array(32);
// Uint8Array(32) [0, 0, 0, ...] - Puffer für Zufallswerte

Konvertierung nach Base64-Dekodierung

const base64 = "SGVsbG8gV29ybGQh";
const binary = Uint8Array.from(atob(base64), c => c.charCodeAt(0));
const arr = toU8Array(binary);

Teilansicht eines ArrayBuffer erhalten

const buffer = new ArrayBuffer(64);
const arr = toU8Array(buffer, 16, 16);
// Ansicht ab Byte 16, 16 Elemente

Implementierungsnotizen

BYTE_LENGTH ist als Konstante definiert, um Minifizierungs-Optimierungen zu ermöglichen. Die Reihenfolge der Typ-Guards ist wichtig: zuerst prüfen ob es eine number ist, dann die byteLength-Eigenschaft für ArrayBufferLike, und den Rest als ArrayLike behandeln.

Einfache Konvertierungen funktionieren mit new Uint8Array, aber dieser Wrapper zeigt seine Stärken bei typ-sicherer, einheitlicher Schnittstellenbehandlung.