Signatur
Beschreibung
getInt32() liest vier aufeinanderfolgende Bytes ab dem angegebenen Byte-Offset des zugrunde liegenden ArrayBuffer und interpretiert sie als 32-Bit-Ganzzahl mit Vorzeichen im Zweierkomplement. Der Wertebereich reicht von -2147483648 bis 2147483647.
Die Methode kommt vor allem beim Parsen binärer Formate zum Einsatz: Dateiköpfe (BMP, WAV, ZIP), Netzwerkprotokolle, WebSocket-Binärnachrichten oder WebAssembly-Speicher. Anders als ein Int32Array muss der Offset nicht an 4 Bytes ausgerichtet sein, und die Bytereihenfolge (Endianness) lässt sich pro Aufruf explizit festlegen – unabhängig von der Plattform.
Standardmäßig wird Big-Endian gelesen (Netzwerk-Bytereihenfolge). Viele Dateiformate und praktisch alle aktuellen CPUs verwenden jedoch Little-Endian – dann muss littleEndian auf true gesetzt werden. Ein vergessenes true ist die häufigste Fehlerquelle.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $byteOffset Pflicht | number | Offset in Bytes relativ zum Beginn des DataView (nicht des Buffers), ab dem gelesen wird. Wird in eine Ganzzahl umgewandelt. |
|
| $littleEndian | boolean | false | true liest im Little-Endian-Format, false oder weggelassen im Big-Endian-Format. |
Rückgabewert
-2147483648 und 2147483647 (inklusive).Beispiele
Big- und Little-Endian im Vergleich
const buffer = new ArrayBuffer(4);
const view = new DataView(buffer);
// Bytes 0xFF 0xFF 0xFF 0x85 schreiben
view.setUint8(0, 0xff);
view.setUint8(1, 0xff);
view.setUint8(2, 0xff);
view.setUint8(3, 0x85);
console.log(view.getInt32(0)); // Big-Endian (Standard)
console.log(view.getInt32(0, true)); // Little-Endian
Breite und Höhe aus einem BMP-Header lesen
const readBmpSize = async (url) => {
const response = await fetch(url);
const buffer = await response.arrayBuffer();
const view = new DataView(buffer);
// BMP ist Little-Endian; Höhe kann negativ sein (Top-down-Bitmap)
const width = view.getInt32(18, true);
const height = view.getInt32(22, true);
return { width, height: Math.abs(height), topDown: height < 0 };
};
readBmpSize('/bilder/logo.bmp').then(console.log);
Nicht ausgerichteter Zugriff und Offset relativ zur View
const buffer = new ArrayBuffer(12);
const full = new DataView(buffer);
full.setInt32(5, -42_000, true); // Offset 5 – nicht durch 4 teilbar
// View beginnt bei Byte 4 – Offset 1 entspricht Byte 5 im Buffer
const sub = new DataView(buffer, 4, 8);
console.log(sub.getInt32(1, true));
Fehler bei Zugriff außerhalb der Grenzen abfangen
const view = new DataView(new ArrayBuffer(6));
try {
view.getInt32(3); // bräuchte Bytes 3–6, aber nur 0–5 existieren
} catch (err) {
console.log(err.name, '-', err.message);
}
// Wichtig · Fallstricke
- Endianness: Standard ist Big-Endian. Für die meisten Dateiformate (BMP, WAV, ZIP) und WebAssembly-Speicher muss
littleEndianauftruegesetzt werden. - RangeError: Wird ausgelöst, wenn
byteOffset + 4größer alsbyteLengthder View ist oder der Offset negativ ist. Bei einem abgelösten (transferierten) Buffer gibt es einenTypeError. - Vorzeichen: Werte ab
0x80000000werden negativ. Für vorzeichenlose WertegetUint32()verwenden, für 64-Bit-WertegetBigInt64(). - Der Offset ist relativ zum Beginn der View, nicht zum Beginn des
ArrayBuffer. - Kompatibilität: in allen modernen Browsern und Node.js verfügbar; funktioniert auch mit
SharedArrayBuffer(dort aber nicht atomar – für Thread-SicherheitAtomicsnutzen).