DataView.getInt32() đọc một số nguyên 32-bit có dấu (-2,147,483,648 đến 2,147,483,647) tại vị trí byte chỉ định, với hỗ trợ endianness.
Cú pháp
dataView.getInt32(byteOffset [, littleEndian])
byteOffset: Vị trí byte bắt đầu (bắt buộc)littleEndian: Tùy chọn,true= little-endian, mặc địnhfalse(big-endian)- Trả về: Số nguyên 32-bit có dấu
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); // Cắt phần thập phân
console.log(view.getInt32(1)); // 554
view.setInt32(1, 3000000000); // > 2^31-1 -> tràn số
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 thực tế
const buffer = new ArrayBuffer(8);
const view = new DataView(buffer);
const value = 0x12345678; // 305419896
view.setInt32(0, value, false); // Big-endian
view.setInt32(4, value, true); // Little-endian
// Bộ nhớ: [0x12, 0x34, 0x56, 0x78, 0x78, 0x56, 0x34, 0x12]
console.log(view.getInt32(0, false)); // 305419896
console.log(view.getInt32(4, true)); // 305419896
Ứng dụng
- Đọc header 32-bit: kích thước file, timestamp, checksum
- Protocol mạng: IP header, sequence number
- Định dạng file: PNG (IHDR), ZIP, ELF
Lưu ý
- Phạm vi: -2,147,483,648 đến 2,147,483,647
- Giá trị float bị cắt phần thập phân
- Tràn số theo quy tắc bù 2
- Cần ít nhất 4 byte từ
byteOffset