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
| Decimal | Binary | Hex | Unsigned |
|---|---|---|---|
| 32767 | 0111111111111111 | 0x7FFF | 32767 |
| 1 | 0000000000000001 | 0x0001 | 1 |
| 0 | 0000000000000000 | 0x0000 | 0 |
| -1 | 1111111111111111 | 0xFFFF | 65535 |
| -32768 | 1000000000000000 | 0x8000 | 32768 |
กรณีการใช้งานทั่วไป
- 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 ไบต์