Signatur
Beschreibung
getInt8() liest genau ein Byte aus dem zugrunde liegenden ArrayBuffer (oder SharedArrayBuffer) eines DataView und interpretiert es im Zweierkomplement als vorzeichenbehaftete 8-Bit-Ganzzahl. Das Ergebnis liegt immer im Bereich -128 bis 127. Bytes mit gesetztem höchstem Bit (0x80–0xFF) ergeben also negative Zahlen.
Die Methode ist nützlich beim Parsen binärer Formate wie Dateiheadern, Netzwerkprotokollen oder Sensordaten, in denen einzelne Felder als signed byte definiert sind, etwa Temperaturwerte, Deltas oder Offsets. Im Gegensatz zu einem Int8Array kann ein DataView an beliebigen Offsets lesen und dabei verschiedene Datentypen mischen.
Da nur ein einzelnes Byte gelesen wird, spielt die Byte-Reihenfolge (Endianness) keine Rolle. Deshalb hat getInt8() anders als z. B. getInt16() keinen littleEndian-Parameter. Der Offset bezieht sich auf den Beginn des DataView, nicht auf den Beginn des Puffers.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $byteOffset Pflicht | number | Offset in Bytes ab dem Beginn des DataView, an dem gelesen wird. Wird mit ToIndex in eine ganze Zahl umgewandelt: Nachkommastellen werden abgeschnitten, undefined wird zu 0. |
Rückgabewert
-128 und 127 (einschließlich).Beispiele
Grundlagen: positive und negative Werte lesen
const buffer = new ArrayBuffer(4);
const view = new DataView(buffer);
view.setUint8(0, 0x7f); // 127
view.setUint8(1, 0x80); // 128 als unsigned
view.setUint8(2, 0xff); // 255 als unsigned
view.setInt8(3, -42);
console.log(view.getInt8(0));
console.log(view.getInt8(1));
console.log(view.getInt8(2));
console.log(view.getInt8(3));
console.log(view.getUint8(3)); // dasselbe Byte ohne Vorzeichen
Sensorpaket parsen: Temperatur als signed byte
// Paketformat: [ID (uint8), Temperatur °C (int8), Feuchte % (uint8)]
const packet = Uint8Array.from([0x01, 0xf6, 0x3c]);
const view = new DataView(packet.buffer);
const reading = {
sensorId: view.getUint8(0),
temperature: view.getInt8(1),
humidity: view.getUint8(2),
};
console.log(reading);
DataView mit Offset und Fehlerbehandlung
const buffer = new Uint8Array([10, 20, 0xfe, 40]).buffer;
// View beginnt bei Byte 2 und ist 2 Bytes lang
const view = new DataView(buffer, 2, 2);
console.log(view.getInt8(0)); // entspricht Byte 2 im Puffer
try {
view.getInt8(2); // außerhalb des Views
} catch (err) {
console.log(err.name);
}
// Wichtig · Fallstricke
- RangeError: Liegt
byteOffsetaußerhalb des Views (byteOffset >= view.byteLength) oder ist er negativ, wird einRangeErrorgeworfen. Der Wert wird dabei nicht aufundefinedgesetzt. - Offset relativ zum View: Wurde der
DataViewmit einem eigenenbyteOffseterzeugt, zählt der Parameter ab dort und nicht ab dem Pufferanfang. - Signed oder unsigned: Wer Werte von 0 bis 255 erwartet, braucht
getUint8(). Wenn man die beiden verwechselt, bekommt man ab0x80unerwartet negative Zahlen. - Abgelöster Puffer: Wurde der
ArrayBufferübertragen (z. B. perpostMessagemit Transfer oderArrayBuffer.prototype.transfer()), wirft der Zugriff einenTypeError. - Leistung: Um viele aufeinanderfolgende Bytes zu lesen, ist ein
Int8Arraymeist schneller und einfacher. - Die Methode wird in allen modernen Browsern und in Node.js unterstützt.