Start · Sprachen · JavaScript · Referenz · DataView.prototype.getInt8()

DataView.prototype.getInt8()

Methode

Liest 1 Byte am angegebenen Byte-Offset eines <code>DataView</code> und gibt es als vorzeichenbehaftete 8-Bit-Ganzzahl (-128 bis 127) zurück.

seit JavaScript ES2015 (Baseline: alle Browser, Node.js 0.10+) Kategorie: method-property

Signatur

DataView.prototype.getInt8(byteOffset)

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

Typ
number
Beschreibung
Eine ganze Zahl zwischen -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
127 -128 -1 -42 214

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);
{ sensorId: 1, temperature: -10, humidity: 60 }

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);
}
-2 RangeError

// Wichtig · Fallstricke

  • RangeError: Liegt byteOffset außerhalb des Views (byteOffset >= view.byteLength) oder ist er negativ, wird ein RangeError geworfen. Der Wert wird dabei nicht auf undefined gesetzt.
  • Offset relativ zum View: Wurde der DataView mit einem eigenen byteOffset erzeugt, 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 ab 0x80 unerwartet negative Zahlen.
  • Abgelöster Puffer: Wurde der ArrayBuffer übertragen (z. B. per postMessage mit Transfer oder ArrayBuffer.prototype.transfer()), wirft der Zugriff einen TypeError.
  • Leistung: Um viele aufeinanderfolgende Bytes zu lesen, ist ein Int8Array meist schneller und einfacher.
  • Die Methode wird in allen modernen Browsern und in Node.js unterstützt.