DataView.getInt8() คืออะไร
เมธอด DataView.prototype.getInt8() ใช้สำหรับ อ่านค่าจำนวนเต็มมีเครื่องหมาย 8-bit (signed 8-bit integer) จากตำแหน่งที่กำหนดใน DataView ค่าที่อ่านได้จะอยู่ในช่วง -128 ถึง 127 (0x80 - 0x7F ใน two's complement)
หมายเหตุ: เอกสารต้นฉบับระบุว่า "signed 8-bit floating point number" ซึ่ง ไม่ถูกต้อง - getInt8() อ่านค่า integer (จำนวนเต็ม) ไม่ใช่ floating point สำหรับ floating point 8-bit ไม่มีใน JavaScript มาตรฐาน
ไวยากรณ์ (Syntax)
dataView.getInt8(byteOffset)
byteOffset- ตำแหน่งเริ่มต้นในหน่วยไบต์ (0-indexed)
คืนค่า: จำนวนเต็มมีเครื่องหมาย 8-bit (-128 ถึง 127)
ตัวอย่างการใช้งาน
ตัวอย่างที่ 1: การอ่านค่าพื้นฐาน
const buffer = new ArrayBuffer(4);
const view = new DataView(buffer);
// เขียนค่า 362 (0x016A) - แต่ Int8 เก็บได้แค่ 8-bit ล่างสุด
view.setInt8(0, 362); // 362 & 0xFF = 106 (0x6A)
console.log(view.getInt8(0)); // 106
ตัวอย่างที่ 2: ค่าลบและ Two's Complement
const buffer = new ArrayBuffer(4);
const view = new DataView(buffer);
// เขียนค่าลบ
view.setInt8(0, -1); // 0xFF (255 unsigned)
view.setInt8(1, -128); // 0x80 (128 unsigned)
view.setInt8(2, 127); // 0x7F (127 unsigned)
console.log(view.getInt8(0)); // -1
console.log(view.getInt8(1)); // -128
console.log(view.getInt8(2)); // 127
// อ่านแบบ unsigned เพื่อดู raw bytes
const u8 = new Uint8Array(buffer);
console.log(u8[0], u8[1], u8[2]); // 255, 128, 127
ตัวอย่างที่ 3: การแปลงค่า Float
const buffer = new ArrayBuffer(4);
const view = new DataView(buffer);
view.setInt8(0, 362.23); // ตัดทศนิยม -> 362 -> 106 (0x6A)
console.log(view.getInt8(0)); // 106
ตัวอย่างที่ 4: อ่านค่าที่ยังไม่ได้ตั้งค่า
const buffer = new ArrayBuffer(4);
const view = new DataView(buffer);
console.log(view.getInt8(0)); // 0
Two's Complement Representation
Signed 8-bit ใช้ two's complement:
| Decimal | Binary | Hex | Unsigned |
|---|---|---|---|
| 127 | 01111111 | 0x7F | 127 |
| 1 | 00000001 | 0x01 | 1 |
| 0 | 00000000 | 0x00 | 0 |
| -1 | 11111111 | 0xFF | 255 |
| -128 | 10000000 | 0x80 | 128 |
กรณีการใช้งานทั่วไป
- Protocol parsing: อ่าน signed byte ใน protocol (เช่น temperature sensors ที่ให้ค่าลบ)
- Audio processing: 8-bit PCM audio samples (signed)
- Image processing: Signed pixel differences, deltas
- Game development: Compact state representation
กรณีพิเศษและข้อผิดพลาด
- โยน
RangeErrorหากbyteOffsetติดลบ หรือbyteOffset >= byteLength - ค่าที่เขียนด้วย
setInt8จะถูก clamp/modulo เข้าช่วง -128 ถึง 127 - ไม่มีพารามิเตอร์ endianness เพราะ 8-bit มีเพียง 1 ไบต์ (endianness ไม่เกี่ยวข้อง)