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

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

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

เมธอด DataView.prototype.getInt16() ใช้สำหรับ อ่านค่าจำนวนเต็มมีเครื่องหมาย 16-bit (signed 16-bit integer) จากตำแหน่งที่กำหนดใน DataView ค่าที่อ่านได้จะอยู่ในช่วง -32,768 ถึง 32,767 (-2^15 ถึง 2^15-1)

ไวยากรณ์ (Syntax)

dataView.getInt16(byteOffset [, littleEndian])
  • byteOffset - ตำแหน่งเริ่มต้นในหน่วยไบต์ (0-indexed)
  • littleEndian (optional) - true = little-endian, false = big-endian (default: false)

คืนค่า: จำนวนเต็มมีเครื่องหมาย 16-bit

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

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

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

view.setInt16(0, 3225); // big-endian default
console.log(view.getInt16(0));       // 3225
console.log(view.getInt16(0, false)); // 3225
console.log(view.getInt16(0, true));  // ค่าที่ต่างออกไป (ถ้าอ่านแบบผิด endian)

ตัวอย่างที่ 2: ค่าลบและ Two's Complement

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

view.setInt16(0, -1);      // 0xFFFF
view.setInt16(2, -32768);  // 0x8000 (min int16)
view.setInt16(2, 32767);   // 0x7FFF (max int16)

console.log(view.getInt16(0)); // -1
console.log(view.getInt16(2)); // 32767

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

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

view.setInt16(0, 564.22); // ตัดทศนิยม -> 564
console.log(view.getInt16(0)); // 564

ตัวอย่างที่ 4: การจัดการ Endianness

const buffer = new ArrayBuffer(4);
const view = new DataView(buffer);
const value = 0x1234; // 4660

view.setInt16(0, value, false); // big-endian: 0x12, 0x34
view.setInt16(2, value, true);  // little-endian: 0x34, 0x12

console.log(view.getInt16(0, false).toString(16)); // 1234
console.log(view.getInt16(2, true).toString(16));  // 1234

ตัวอย่างที่ 5: อ่านค่าที่ยังไม่ได้ตั้งค่า

const buffer = new ArrayBuffer(4);
const view = new DataView(buffer);
console.log(view.getInt16(0)); // 0

Two's Complement สำหรับ 16-bit

DecimalBinaryHexUnsigned
3276701111111111111110x7FFF32767
100000000000000010x00011
000000000000000000x00000
-111111111111111110xFFFF65535
-3276810000000000000000x800032768

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

  • Audio processing: 16-bit PCM audio samples (signed) - มาตรฐาน CD quality
  • Network protocols: Signed short values ใน protocol ต่างๆ
  • Sensor data: Accelerometer, gyroscope, temperature (รองรับค่าลบ)
  • Image processing: Signed pixel differences, DCT coefficients
  • Game development: Compact coordinate storage, relative positions

กรณีพิเศษและข้อผิดพลาด

  • โยน RangeError หาก byteOffset ติดลบ หรือ byteOffset + 2 > byteLength
  • ค่าที่เขียนจะถูก modulo 65536 (wrap around ตาม two's complement)
  • Endianness สำคัญมากสำหรับ 16-bit เพราะมี 2 ไบต์