DataView.setInt16() ghi một số nguyên 16-bit có dấu (-32,768 đến 32,767) vào buffer tại vị trí byte chỉ định, hỗ trợ endianness.
Cú pháp
dataView.setInt16(byteOffset, value [, littleEndian])
byteOffset: Vị trí byte bắt đầu ghivalue: Giá trị int16littleEndian: Tùy chọn,true= little-endian, mặc địnhfalse- Trả về:
undefined
Ví dụ cơ bản
const buffer = new ArrayBuffer(20);
const view = new DataView(buffer);
view.setInt16(1, 3225);
console.log(view.getInt16(1)); // 3225
Xử lý float và tràn số
const buffer = new ArrayBuffer(20);
const view = new DataView(buffer);
view.setInt16(1, 564.22); // -> 564
console.log(view.getInt16(1)); // 564
view.setInt16(1, 40000); // > 32767 -> tràn
console.log(view.getInt16(1)); // -25536
view.setInt16(1, -40000); // < -32768 -> tràn
console.log(view.getInt16(1)); // 25536
Đọc vị trí chưa ghi
const buffer = new ArrayBuffer(20);
const view = new DataView(buffer);
view.setInt16(1); // Ghi 0
console.log(view.getInt16(1)); // 0
Bảng giá trị Int16 (Bù 2)
| Input | Hex | Giá trị lưu |
|---|---|---|
| 0 | 0x0000 | 0 |
| 32767 | 0x7FFF | 32767 |
| 32768 | 0x8000 | -32768 |
| 65535 | 0xFFFF | -1 |
| -1 | 0xFFFF | -1 |
| -32768 | 0x8000 | -32768 |
Ứng dụng
- Mẫu âm thanh PCM 16-bit signed (WAV, AIFF)
- Cảm biến nhiệt độ/độ ẩm có dấu
- Delta encoding, differential values
- Protocol Modbus (holding register signed)
Lưu ý
- Phạm vi: -32,768 đến 32,767
- Cần 2 byte từ
byteOffset - Float -> truncate, tràn theo bù 2