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

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

DataView.setInt8() คืออะไร

เมธอด DataView.prototype.setInt8() ใช้สำหรับ เขียนค่าจำนวนเต็มมีเครื่องหมาย 8-bit (signed 8-bit integer) ลงในตำแหน่งที่กำหนดใน DataView ค่าที่เขียนได้จะอยู่ในช่วง -128 ถึง 127

หมายเหตุ: เอกสารต้นฉบับระบุว่า "signed 8-bit floating point number" ซึ่ง ไม่ถูกต้อง - setInt8() เขียนค่า integer (จำนวนเต็ม) ไม่ใช่ floating point

ไวยากรณ์ (Syntax)

dataView.setInt8(byteOffset, value)
  • byteOffset - ตำแหน่งในหน่วยไบต์ (0-indexed)
  • value - ค่าที่จะเขียน (-128 ถึง 127)

คืนค่า: undefined

ตัวอย่างการใช้งาน

ตัวอย่างที่ 1: การเขียนและอ่านค่าพื้นฐาน

const buffer = new ArrayBuffer(4);
const view = new DataView(buffer);

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 (min int8)
view.setInt8(2, 127);   // 0x7F (max int8)
view.setInt8(3, -50);   // 0xCE (206 unsigned)

console.log(view.getInt8(0)); // -1
console.log(view.getInt8(1)); // -128
console.log(view.getInt8(2)); // 127
console.log(view.getInt8(3)); // -50

// ดู raw bytes
const u8 = new Uint8Array(buffer);
console.log(Array.from(u8)); // [255, 128, 127, 206]

ตัวอย่างที่ 3: การแปลงค่า Float

const buffer = new ArrayBuffer(4);
const view = new DataView(buffer);

view.setInt8(0, 362.23); // truncate -> 362 -> 106
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 สำหรับ 8-bit

DecimalBinaryHexUnsigned (Uint8)
127011111110x7F127
1000000010x011
0000000000x000
-1111111110xFF255
-50110011100xCE206
-128100000000x80128

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

  • Protocol parsing: Signed byte fields ใน binary protocols
  • Sensor data: Temperature offsets, accelerometer (signed values)
  • Audio: 8-bit PCM signed audio samples
  • Image processing: Signed differences, delta encoding
  • Game development: Compact state flags with negative values
  • Cryptography: Byte-level manipulation

ข้อควรระวัง

  • โยน RangeError หาก byteOffset ติดลบ หรือ byteOffset >= byteLength
  • ค่า value จะถูกแปลงด้วย ToInt8 (modulo 256 แล้ว interpret เป็น signed)
  • ไม่มีพารามิเตอร์ endianness เพราะ 8-bit มีเพียง 1 ไบต์
  • JavaScript ไม่มีทีป 8-bit integer แบบ native - DataView ช่วยให้จัดการได้