Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

ฟังก์ชัน DataView.getInt8() ใน JavaScript

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:

DecimalBinaryHexUnsigned
127011111110x7F127
1000000010x011
0000000000x000
-1111111110xFF255
-128100000000x80128

กรณีการใช้งานทั่วไป

  • 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 ไม่เกี่ยวข้อง)