DataView.setInt32() ghi một số nguyên 32-bit có dấu (-2,147,483,648 đến 2,147,483,647) vào buffer tại vị trí byte chỉ định, hỗ trợ endianness.
Cú pháp
dataView.setInt32(byteOffset, value [, littleEndian])
byteOffset: Vị trí byte bắt đầu ghivalue: Giá trị int32littleEndian: 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.setInt32(1, 36274722);
console.log(view.getInt32(1)); // 36274722
Xử lý float và tràn số
const buffer = new ArrayBuffer(20);
const view = new DataView(buffer);
view.setInt32(1, 554.36); // -> 554
console.log(view.getInt32(1)); // 554
view.setInt32(1, 3000000000); // > 2^31-1 -> tràn
console.log(view.getInt32(1)); // -1294967296
view.setInt32(1, -3000000000); // < -2^31 -> tràn
console.log(view.getInt32(1)); // 1294967296
Đọc vị trí chưa ghi
const buffer = new ArrayBuffer(20);
const view = new DataView(buffer);
view.setInt32(1); // Ghi 0
console.log(view.getInt32(1)); // 0
Endianness
const buffer = new ArrayBuffer(8);
const view = new DataView(buffer);
const value = 0x12345678;
view.setInt32(0, value, false); // Big-endian
view.setInt32(4, value, true); // Little-endian
console.log(new Uint8Array(buffer)); // [18, 52, 86, 120, 120, 86, 52, 18]
Ứng dụng
- Timestamp Unix (giây từ epoch) - int32 đủ dùng đến năm 2038
- Kích thước file, offset trong file system
- ID, sequence number có dấu
- Định dạng file: PNG (IHDR width/height), ELF, Mach-O
Lưu ý
- Phạm vi: -2,147,483,648 đến 2,147,483,647
- Cần 4 byte từ
byteOffset - Float -> truncate, tràn theo bù 2
- Year 2038 problem: Unix timestamp int32 tràn sau 19/1/2038 -> dùng int64/Float64