DataView.setInt8() ghi một số nguyên 8-bit có dấu (-128 đến 127) vào buffer tại vị trí byte chỉ định. Đây là phương thức ghi kích thước nhỏ nhất.
Cú pháp
dataView.setInt8(byteOffset, value)
byteOffset: Vị trí byte (0-based)value: Giá trị cần ghi (-128 đến 127)- Không có tham số endianness (1 byte)
- Trả về:
undefined
Ví dụ cơ bản
const buffer = new ArrayBuffer(20);
const view = new DataView(buffer);
view.setInt8(1, 362); // 362 = 0x16A -> giữ 8 bit thấp: 0x6A = 106
console.log(view.getInt8(1)); // 106
Xử lý float và tràn số
const buffer = new ArrayBuffer(20);
const view = new DataView(buffer);
view.setInt8(1, 362.23); // -> 362 -> 106
console.log(view.getInt8(1)); // 106
view.setInt8(1, 200); // > 127 -> tràn: 200 - 256 = -56
console.log(view.getInt8(1)); // -56
view.setInt8(1, -200); // < -128 -> tràn: -200 + 256 = 56
console.log(view.getInt8(1)); // 56
Đọc vị trí chưa ghi
const buffer = new ArrayBuffer(20);
const view = new DataView(buffer);
view.setInt8(1); // Ghi 0
console.log(view.getInt8(1)); // 0
Bảng giá trị Int8 (Bù 2)
| Input | Hex (8 bit) | Giá trị lưu (Int8) |
|---|---|---|
| 0 | 0x00 | 0 |
| 127 | 0x7F | 127 |
| 128 | 0x80 | -128 |
| 255 | 0xFF | -1 |
| -1 | 0xFF | -1 |
| -128 | 0x80 | -128 |
| -129 | 0x7F | 127 |
Ứng dụng
- Ghi byte đơn: version, flags, type byte, magic number
- ASCII/UTF-8 character encoding
- Bitmask, bitfield (kết hợp với bitwise operations)
- Protocol 1 byte: MQTT, CoAP, BLE
Lưu ý
- Giá trị input modulo 256 (giữ 8 bit thấp)
- Kết quả hiểu theo signed (bù 2)
- Vượt ranh buffer ->
RangeError