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

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

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 ghi
  • value: Giá trị int32
  • 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.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