Signatur
Beschreibung
getUint32() liest vier aufeinanderfolgende Bytes aus dem ArrayBuffer hinter einer DataView und setzt sie zu einer vorzeichenlosen 32-Bit-Ganzzahl zusammen. Der Wertebereich reicht von 0 bis 4294967295 (232 − 1). Das Ergebnis ist ein normales number, kein BigInt.
Die Methode braucht man vor allem zum Parsen binärer Formate: Dateiköpfe (PNG, ZIP, WAV, BMP), Netzwerkprotokolle, WebSocket-Binärnachrichten oder WebAssembly-Speicher. Im Gegensatz zu einem Uint32Array muss der Offset nicht an einer 4-Byte-Grenze liegen, und die Byte-Reihenfolge lässt sich pro Aufruf festlegen.
Standardmäßig wird Big-Endian gelesen (Netzwerk-Byte-Reihenfolge). Für Little-Endian-Formate, etwa die meisten Dateiformate unter Windows oder den Speicher von x86/ARM-Rechnern, muss littleEndian ausdrücklich auf true gesetzt werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $byteOffset Pflicht | number | Position in Bytes ab dem Beginn der View, ab der gelesen wird. Wird in eine Ganzzahl umgewandelt; muss zwischen 0 und byteLength - 4 liegen. |
|
| $littleEndian | boolean | false | Bei true wird Little-Endian gelesen, bei false oder fehlendem Wert Big-Endian. |
Rückgabewert
0 bis 4294967295.Beispiele
Grundlagen: Big- und Little-Endian
const buffer = new ArrayBuffer(4);
const view = new DataView(buffer);
// Bytes 0x12 0x34 0x56 0x78 schreiben
[0x12, 0x34, 0x56, 0x78].forEach((b, i) => view.setUint8(i, b));
console.log(view.getUint32(0).toString(16)); // Big-Endian (Standard)
console.log(view.getUint32(0, true).toString(16)); // Little-Endian
Kein Vorzeichen – Unterschied zu getInt32()
const view = new DataView(new ArrayBuffer(4));
view.setUint32(0, 0xFFFFFFFF);
console.log(view.getUint32(0)); // vorzeichenlos
console.log(view.getInt32(0)); // vorzeichenbehaftet
PNG-Breite und -Höhe aus dem IHDR-Chunk lesen
const getPngSize = async (url) => {
const response = await fetch(url);
const buffer = await response.arrayBuffer();
const view = new DataView(buffer);
// PNG-Signatur prüfen: 0x89 'P' 'N' 'G'
if (view.getUint32(0) !== 0x89504E47) {
throw new Error('Keine PNG-Datei');
}
// IHDR beginnt bei Offset 8; Breite/Höhe liegen bei 16 und 20 (Big-Endian)
return {
width: view.getUint32(16),
height: view.getUint32(20)
};
};
getPngSize('/bilder/logo.png').then(console.log);
Nicht ausgerichteter Zugriff in einer WAV-Datei (Little-Endian)
const readWavHeader = (buffer) => {
const view = new DataView(buffer);
return {
fileSize: view.getUint32(4, true) + 8, // RIFF-Chunkgröße
sampleRate: view.getUint32(24, true),
byteRate: view.getUint32(28, true)
};
};
// Beispiel: Datei aus einem <input type="file">
document.querySelector('#wav').addEventListener('change', async (e) => {
const buffer = await e.target.files[0].arrayBuffer();
console.log(readWavHeader(buffer));
});
// Wichtig · Fallstricke
- Byte-Reihenfolge: Standard ist Big-Endian. Bei Little-Endian-Formaten wird
trueoft vergessen, was zu völlig falschen Werten führt, aber keinen Fehler auslöst. - RangeError: Wird ausgelöst, wenn
byteOffsetnegativ ist oderbyteOffset + 4über das Ende der View hinausgeht. Der Offset zählt abbyteOffsetder View, nicht ab dem Anfang des zugrunde liegenden Buffers. - TypeError: Wird ausgelöst, wenn der
ArrayBufferabgekoppelt ist (zum Beispiel nachpostMessagemit Transfer oder nachbuffer.transfer()). - Das Ergebnis ist immer ein
number. Bitoperatoren wie|oder&wandeln Werte ≥ 231 in negative Int32-Werte um. Mit>>> 0bleibt der Wert vorzeichenlos. - Für 64-Bit-Werte gibt es
getBigUint64(). Wenn viele gleichartige, ausgerichtete Werte in nativer Byte-Reihenfolge vorliegen, ist einUint32Arraymeist schneller. - Wird in allen modernen Browsern, in Node.js und in Deno unterstützt.