DataView.setUint32() ghi một số nguyên 32-bit không dấu (0 đến 4,294,967,295) vào buffer tại vị trí byte chỉ định, với hỗ trợ endianness.
Cú pháp
dataView.setUint32(byteOffset, value [, littleEndian])
byteOffset: Vị trí byte bắt đầu ghivalue: Giá trị cần ghi (0 - 4,294,967,295)littleEndian: 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.setUint32(1, 45544);
console.log(view.getUint32(1)); // 45544
Xử lý giá trị float
const buffer = new ArrayBuffer(20);
const view = new DataView(buffer);
view.setUint32(1, 455.44); // Phần thập phân bị cắt
console.log(view.getUint32(1)); // 455
Tràn số (Overflow)
const buffer = new ArrayBuffer(20);
const view = new DataView(buffer);
view.setUint32(0, 4294967295); // Max uint32
console.log(view.getUint32(0)); // 4294967295
view.setUint32(0, 4294967296); // 2^32 -> tràn về 0
console.log(view.getUint32(0)); // 0
view.setUint32(0, -1); // Âm -> bù 2: 4294967295
console.log(view.getUint32(0)); // 4294967295
Đọc vị trí chưa ghi
const buffer = new ArrayBuffer(20);
const view = new DataView(buffer);
view.setUint32(1); // Ghi 0
console.log(view.getUint32(1)); // 0
Endianness
const buffer = new ArrayBuffer(8);
const view = new DataView(buffer);
const value = 0x12345678;
view.setUint32(0, value, false); // Big-endian
view.setUint32(4, value, true); // Little-endian
// Bộ nhớ: [0x12,0x34,0x56,0x78, 0x78,0x56,0x34,0x12]
console.log(new Uint8Array(buffer)); // Uint8Array(8) [18, 52, 86, 120, 120, 86, 52, 18]
Ứng dụng
- Ghi header file: kích thước file (PNG, ZIP, MP4)
- Protocol mạng: sequence number, timestamp, checksum
- ID lớn, pointer, bitmask 32-bit
- WebGL: uniform buffer, shader storage buffer
Lưu ý
- Cần 4 byte từ
byteOffset - Giá trị float bị truncate (cắt phần thập phân)
- Giá trị âm chuyển thành bù 2
- Vượt ranh buffer ném
RangeError