Каталог
Веб-разработка с нуля: четыре курса по порядку.
HTML, затем CSS, JavaScript и SQL. Каждый курс говорит, что нужно знать до него и что вы будете уметь после.
Загружаем курсы…
Каталог
HTML, затем CSS, JavaScript и SQL. Каждый курс говорит, что нужно знать до него и что вы будете уметь после.
Загружаем курсы…
Урок 111 из 114 · 9 мин
DataView, buffer, byteLength, byteOffset и методы get и set для Int8, Uint8, Int16, Uint16, Int32, Uint32, Float16, Float32, Float64, BigInt64 и BigUint64 с порядком байтов.
В пакете от датчика всё вперемешку: байт, два байта, четыре байта…
DataView читает любое число из любого места буфера. И знает про порядок байтов.
DataView · buffer · byteLength · byteOffsetnew DataView(buffer, offset, length) — окно в буфер; buffer, byteOffset, byteLength — как у типизированных массивов.const buf = new ArrayBuffer(16);
const dv = new DataView(buf, 4, 8);
console.log(dv.buffer === buf, dv.byteOffset, dv.byteLength);getInt8() · setInt8() · getUint8() · setUint8()const dv = new DataView(new ArrayBuffer(2));
dv.setUint8(0, 255);
dv.setInt8(1, -1);
console.log(dv.getUint8(0), dv.getInt8(0), dv.getUint8(1));getInt16() · setInt16() · getUint16() · setUint16()littleEndian: true — младший байт первым (как в x86), по умолчанию — старший первым (сетевой порядок).const dv = new DataView(new ArrayBuffer(4));
dv.setUint16(0, 1042);
dv.setInt16(2, -2, true);
console.log(dv.getUint16(0), dv.getUint16(0, true), dv.getInt16(2, true));getInt32() · setInt32() · getUint32() · setUint32()const dv = new DataView(new ArrayBuffer(8));
dv.setUint32(0, 4_000_000_000);
dv.setInt32(4, -5);
console.log(dv.getUint32(0), dv.getInt32(0), dv.getInt32(4));getFloat16() · setFloat16() · getFloat32() · setFloat32()const dv = new DataView(new ArrayBuffer(6));
dv.setFloat16(0, 1.5);
dv.setFloat32(2, 0.1);
console.log(dv.getFloat16(0), dv.getFloat32(2));getFloat64() · setFloat64()const dv = new DataView(new ArrayBuffer(8));
dv.setFloat64(0, Math.PI);
console.log(dv.getFloat64(0) === Math.PI);getBigInt64() · setBigInt64() · getBigUint64() · setBigUint64()const dv = new DataView(new ArrayBuffer(8));
dv.setBigUint64(0, 2n ** 64n - 1n);
console.log(dv.getBigUint64(0), dv.getBigInt64(0));
dv.setBigInt64(0, -2n);
console.log(dv.getBigInt64(0));Любой двоичный формат описывается тремя вещами: смещение, размер и порядок байтов. Ровно эти три параметра и передаёшь в DataView.
Пакет: байт 0 — тип (Uint8), байты 1–2 — номер заказа (Uint16, старший байт первым), байты 3–6 — сумма в копейках (Uint32, младший байт первым). Напиши parsePacket(buf) → { type, id, kopecks }.
Выберите один ответ.
Что значит littleEndian = true?
Проверяем состояние обучения…