Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Phương thức DataView.setUint16() trong JavaScript

DataView.setUint16() ghi một số nguyên 16-bit không dấu (0 đến 65,535) vào buffer tại vị trí byte chỉ định, hỗ trợ endianness.

Cú pháp

dataView.setUint16(byteOffset, value [, littleEndian])
  • byteOffset: Vị trí byte bắt đầu ghi
  • value: Giá trị (0 - 65535)
  • littleEndian: Tùy chọn, true = little-endian, mặc định false
  • Trả về: undefined

Ví dụ cơ bản

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

view.setUint16(1, 45544);
console.log(view.getUint16(1)); // 45544

Xử lý float và tràn số

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

view.setUint16(1, 455.44); // -> 455
console.log(view.getUint16(1)); // 455

view.setUint16(1, 70000); // > 65535 -> tràn: 70000 - 65536 = 4464
console.log(view.getUint16(1)); // 4464

view.setUint16(1, -1); // -> 65535 (bù 2)
console.log(view.getUint16(1)); // 65535

Đọc vị trí chưa ghi

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

view.setUint16(1); // Ghi 0
console.log(view.getUint16(1)); // 0

Endianness

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

view.setUint16(0, value, false); // Big-endian: 0x12, 0x34
view.setUint16(2, value, true);  // Little-endian: 0x34, 0x12

console.log(new Uint8Array(buffer)); // [18, 52, 52, 18]

Ứng dụng

  • Port number trong network protocol (TCP/UDP header)
  • Kích thước chunk, length field (PNG, ZIP, BMP)
  • Unicode code point (BMP - Basic Multilingual Plane)
  • Cảm biến 16-bit, mẫu âm thanh 16-bit unsigned

Lưu ý

  • Cần 2 byte từ byteOffset
  • Phạm vi: 0 - 65,535
  • Float -> truncate, âm -> bù 2