Baseline Widely available *
ÐÑедÑÑавление DataView
пÑедоÑÑавлÑÐµÑ Ð½Ð¸Ð·ÐºÐ¾-ÑÑовневÑй инÑеÑÑÐµÐ¹Ñ Ð´Ð»Ñ ÑÑÐµÐ½Ð¸Ñ Ð¸ запиÑи ÑазлиÑнÑÑ
ÑиÑловÑÑ
Ñипов в бинаÑном ArrayBuffer
, незавиÑимо Ð¾Ñ Ð¿Ð¾ÑÑдка байÑов плаÑÑоÑмÑ.
ÐногобайÑовÑе ÑиÑловÑе ÑоÑмаÑÑ Ð¿ÑедÑÑавлÑÑÑÑÑ Ð² памÑÑи по-ÑÐ°Ð·Ð½Ð¾Ð¼Ñ Ð² завиÑимоÑÑи Ð¾Ñ Ð°ÑÑ
иÑекÑÑÑÑ Ð¼Ð°ÑÐ¸Ð½Ñ (ÑмоÑÑиÑе Endianness Ð´Ð»Ñ Ð¾Ð±ÑÑÑнениÑ). ÐеÑÐ¾Ð´Ñ Ð´Ð¾ÑÑÑпа DataView
пÑедоÑÑавлÑÑÑ ÑвнÑй ÑпоÑоб обÑаÑÐµÐ½Ð¸Ñ Ðº даннÑм вне завиÑимоÑÑи Ð¾Ñ Ð¿Ð¾ÑÑдка байÑов плаÑÑоÑмÑ.
const littleEndian = (() => {
const buffer = new ArrayBuffer(2);
new DataView(buffer).setInt16(0, 256, true /* littleEndian */);
// Int16Array иÑполÑзÑÐµÑ Ð¿Ð¾ÑÑдок байÑов плаÑÑоÑмÑ.
return new Int16Array(buffer)[0] === 256;
})();
console.log(littleEndian); // true или false
64-биÑнÑе ÑелÑе ÑиÑла
ÐекоÑоÑÑе бÑаÑзеÑÑ Ð½Ðµ поддеÑживаÑÑ DataView.prototype.setBigInt64()
и DataView.prototype.setBigUint64()
. ÐоÑÑÐ¾Ð¼Ñ Ð´Ð»Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ 64-биÑнÑÑ
опеÑаÑий, коÑоÑÑе бÑдÑÑ ÑабоÑаÑÑ Ð² лÑбом бÑаÑзеÑе, можно ÑеализоваÑÑ ÑобÑÑвеннÑÑ ÑÑнкÑÐ¸Ñ getUint64()
Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð·Ð½Ð°Ñений Ñ ÑоÑноÑÑÑÑ Ð´Ð¾ Number.MAX_SAFE_INTEGER
, Ñего доÑÑаÑоÑно в болÑÑинÑÑве ÑлÑÑаев.
function getUint64(dataview, byteOffset, littleEndian) {
// Ñазбиваем 64-биÑное ÑиÑло на две 32-биÑнÑÑ
(по 4 байÑа) ÑаÑÑи
const left = dataview.getUint32(byteOffset, littleEndian);
const right = dataview.getUint32(byteOffset + 4, littleEndian);
// обÑединÑем два 32-биÑнÑÑ
знаÑениÑ
const combined = littleEndian
? left + 2 ** 32 * right
: 2 ** 32 * left + right;
if (!Number.isSafeInteger(combined))
console.warn(
combined,
"пÑевÑÑÐ°ÐµÑ MAX_SAFE_INTEGER. ТоÑноÑÑÑ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾ÑеÑÑна",
);
return combined;
}
Ð ÑлÑÑае еÑли вам вÑÑ Ð¶Ðµ нÑжен полнÑй 64-биÑнÑй диапазон, можно ÑоздаÑÑ BigInt
. ХоÑÑ ÑабоÑа Ñо вÑÑÑоеннÑми знаÑениÑми BigInt намного бÑÑÑÑее, Ñем Ñ ÑквиваленÑами из ÑамоÑÑоÑÑелÑнÑÑ
ÑеализаÑий, иÑполÑзование знаÑений BigInt вÑегда бÑÐ´ÐµÑ Ð½Ð°Ð¼Ð½Ð¾Ð³Ð¾ медленнее, Ñем 32-биÑнÑÑ
ÑелÑÑ
ÑиÑел, из-за Ñ
аÑакÑеÑа иÑ
пеÑеменного ÑазмеÑа в JavaScript.
const BigInt = window.BigInt,
bigThirtyTwo = BigInt(32),
bigZero = BigInt(0);
function getUint64BigInt(dataview, byteOffset, littleEndian) {
// Ñазбиваем 64-биÑное ÑиÑло на две 32-биÑнÑÑ
(по 4 байÑа) ÑаÑÑи
const left = BigInt(dataview.getUint32(byteOffset | 0, !!littleEndian) >>> 0);
const right = BigInt(
dataview.getUint32(((byteOffset | 0) + 4) | 0, !!littleEndian) >>> 0,
);
// обÑединÑем два 32-биÑнÑÑ
знаÑÐµÐ½Ð¸Ñ Ð¸ возвÑаÑаем
return littleEndian
? (right << bigThirtyTwo) | left
: (left << bigThirtyTwo) | right;
}
ÐонÑÑÑÑкÑоÑ
DataView()
СоздаÑÑ Ð½Ð¾Ð²Ñй обÑÐµÐºÑ DataView
.
ÐÑи ÑвойÑÑва опÑÐµÐ´ÐµÐ»ÐµÐ½Ñ Ð² DataView.prototype
и еÑÑÑ Ñ Ð²ÑеÑ
ÑкземплÑÑов DataView
.
DataView.prototype.buffer
ArrayBuffer
, ÑвÑзаннÑй Ñ Ð¿ÑедÑÑавлением. УÑÑанавливаеÑÑÑ Ð² Ð¼Ð¾Ð¼ÐµÐ½Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¸ доÑÑÑпно ÑолÑко Ð´Ð»Ñ ÑÑениÑ.
DataView.prototype.byteLength
Ð Ð°Ð·Ð¼ÐµÑ Ð¿ÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð² байÑÐ°Ñ . УÑÑанавливаеÑÑÑ Ð² Ð¼Ð¾Ð¼ÐµÐ½Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¸ доÑÑÑпно ÑолÑко Ð´Ð»Ñ ÑÑениÑ.
DataView.prototype.byteOffset
СмеÑение пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð² байÑаÑ
Ð¾Ñ Ð½Ð°Ñала его ArrayBuffer
. УÑÑанавливаеÑÑÑ Ð² Ð¼Ð¾Ð¼ÐµÐ½Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¸ доÑÑÑпно ÑолÑко Ð´Ð»Ñ ÑÑениÑ.
DataView.prototype.constructor
ФÑнкÑиÑ-конÑÑÑÑкÑоÑ, ÑоздаÑÑÐ°Ñ ÑкземплÑÑ Ð¾Ð±ÑекÑа. ÐÐ»Ñ ÑкземплÑÑов DataView
наÑалÑнÑм знаÑением ÑвлÑеÑÑÑ ÐºÐ¾Ð½ÑÑÑÑкÑÐ¾Ñ DataView
.
DataView.prototype[@@toStringTag]
ÐаÑалÑнÑм знаÑением ÑвойÑÑва @@toStringTag
ÑвлÑеÑÑÑ ÑÑÑока "DataView"
. ÐÑо ÑвойÑÑво иÑполÑзÑеÑÑÑ Ð² Object.prototype.toString()
.
DataView.prototype.getBigInt64()
ЧиÑÐ°ÐµÑ 8 байÑов наÑÐ¸Ð½Ð°Ñ Ñ Ñказанного ÑмеÑÐµÐ½Ð¸Ñ ÑÑого DataView
и инÑеÑпÑеÑиÑÑÐµÑ Ð¸Ñ
как 64-биÑное знаковое Ñелое ÑиÑло.
DataView.prototype.getBigUint64()
ЧиÑÐ°ÐµÑ 8 байÑов наÑÐ¸Ð½Ð°Ñ Ñ Ñказанного ÑмеÑÐµÐ½Ð¸Ñ ÑÑого DataView
и инÑеÑпÑеÑиÑÑÐµÑ Ð¸Ñ
как 64-биÑное беззнаковое Ñелое ÑиÑло.
DataView.prototype.getFloat32()
ЧиÑÐ°ÐµÑ 4 байÑа наÑÐ¸Ð½Ð°Ñ Ñ Ñказанного ÑмеÑÐµÐ½Ð¸Ñ ÑÑого DataView
и инÑеÑпÑеÑиÑÑÐµÑ Ð¸Ñ
как 32-биÑное ÑиÑло Ñ Ð¿Ð»Ð°Ð²Ð°ÑÑей ÑоÑкой.
DataView.prototype.getFloat64()
ЧиÑÐ°ÐµÑ 8 байÑов наÑÐ¸Ð½Ð°Ñ Ñ Ñказанного ÑмеÑÐµÐ½Ð¸Ñ ÑÑого DataView
и инÑеÑпÑеÑиÑÑÐµÑ Ð¸Ñ
как 64-биÑное ÑиÑло Ñ Ð¿Ð»Ð°Ð²Ð°ÑÑей ÑоÑкой.
DataView.prototype.getInt16()
ЧиÑÐ°ÐµÑ 2 байÑа наÑÐ¸Ð½Ð°Ñ Ñ Ñказанного ÑмеÑÐµÐ½Ð¸Ñ ÑÑого DataView
и инÑеÑпÑеÑиÑÑÐµÑ Ð¸Ñ
как 16-биÑное знаковое Ñелое ÑиÑло.
DataView.prototype.getInt32()
ЧиÑÐ°ÐµÑ 4 байÑа наÑÐ¸Ð½Ð°Ñ Ñ Ñказанного ÑмеÑÐµÐ½Ð¸Ñ ÑÑого DataView
и инÑеÑпÑеÑиÑÑÐµÑ Ð¸Ñ
как 32-биÑное знаковое Ñелое ÑиÑло.
DataView.prototype.getInt8()
ЧиÑÐ°ÐµÑ 1 Ð±Ð°Ð¹Ñ Ð½Ð°ÑÐ¸Ð½Ð°Ñ Ñ Ñказанного ÑмеÑÐµÐ½Ð¸Ñ ÑÑого DataView
и инÑеÑпÑеÑиÑÑÐµÑ ÐµÐ³Ð¾ как 8-биÑное знаковое Ñелое ÑиÑло.
DataView.prototype.getUint16()
ЧиÑÐ°ÐµÑ 2 байÑа наÑÐ¸Ð½Ð°Ñ Ñ Ñказанного ÑмеÑÐµÐ½Ð¸Ñ ÑÑого DataView
и инÑеÑпÑеÑиÑÑÐµÑ Ð¸Ñ
как 16-биÑное беззнаковое Ñелое ÑиÑло.
DataView.prototype.getUint32()
ЧиÑÐ°ÐµÑ 4 байÑа наÑÐ¸Ð½Ð°Ñ Ñ Ñказанного ÑмеÑÐµÐ½Ð¸Ñ ÑÑого DataView
и инÑеÑпÑеÑиÑÑÐµÑ Ð¸Ñ
как 32-биÑное беззнаковое Ñелое ÑиÑло.
DataView.prototype.getUint8()
ЧиÑÐ°ÐµÑ 1 Ð±Ð°Ð¹Ñ Ð½Ð°ÑÐ¸Ð½Ð°Ñ Ñ Ñказанного ÑмеÑÐµÐ½Ð¸Ñ ÑÑого DataView
и инÑеÑпÑеÑиÑÑÐµÑ ÐµÐ³Ð¾ как 8-биÑное беззнаковое Ñелое ÑиÑло.
DataView.prototype.setBigInt64()
ÐÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ BigInt и ÑоÑ
ÑанÑÐµÑ ÐµÐ³Ð¾ как 64-биÑное знаковое Ñелое ÑиÑло в 8 байÑаÑ
наÑÐ¸Ð½Ð°Ñ Ñ Ñказанного ÑмеÑÐµÐ½Ð¸Ñ ÑÑого DataView
.
DataView.prototype.setBigUint64()
ÐÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ BigInt и ÑоÑ
ÑанÑÐµÑ ÐµÐ³Ð¾ как 64-биÑное беззнаковое Ñелое ÑиÑло в 8 байÑаÑ
наÑÐ¸Ð½Ð°Ñ Ñ Ñказанного ÑмеÑÐµÐ½Ð¸Ñ ÑÑого DataView
.
DataView.prototype.setFloat32()
ÐÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑиÑло и ÑоÑ
ÑанÑÐµÑ ÐµÐ³Ð¾ как 32-биÑное ÑиÑло Ñ Ð¿Ð»Ð°Ð²Ð°ÑÑей ÑоÑкой в 4 байÑаÑ
наÑÐ¸Ð½Ð°Ñ Ñ Ñказанного ÑмеÑÐµÐ½Ð¸Ñ ÑÑого DataView
.
DataView.prototype.setFloat64()
ÐÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑиÑло и ÑоÑ
ÑанÑÐµÑ ÐµÐ³Ð¾ как 64-биÑное ÑиÑло Ñ Ð¿Ð»Ð°Ð²Ð°ÑÑей ÑоÑкой в 8 байÑаÑ
наÑÐ¸Ð½Ð°Ñ Ñ Ñказанного ÑмеÑÐµÐ½Ð¸Ñ ÑÑого DataView
.
DataView.prototype.setInt16()
ÐÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑиÑло и ÑоÑ
ÑанÑÐµÑ ÐµÐ³Ð¾ как 16-биÑное знаковое Ñелое ÑиÑло в 2 байÑаÑ
по ÑÐºÐ°Ð·Ð°Ð½Ð½Ð¾Ð¼Ñ ÑмеÑÐµÐ½Ð¸Ñ ÑÑого DataView
.
DataView.prototype.setInt32()
ÐÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑиÑло и ÑоÑ
ÑанÑÐµÑ ÐµÐ³Ð¾ как 32-биÑное знаковое Ñелое ÑиÑло в 4 байÑаÑ
по ÑÐºÐ°Ð·Ð°Ð½Ð½Ð¾Ð¼Ñ ÑмеÑÐµÐ½Ð¸Ñ ÑÑого DataView
.
DataView.prototype.setInt8()
ÐÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑиÑло и ÑоÑ
ÑанÑÐµÑ ÐµÐ³Ð¾ как 8-биÑное знаковое Ñелое ÑиÑло в байÑе по ÑÐºÐ°Ð·Ð°Ð½Ð½Ð¾Ð¼Ñ ÑмеÑÐµÐ½Ð¸Ñ ÑÑого DataView
.
DataView.prototype.setUint16()
ÐÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑиÑло и ÑоÑ
ÑанÑÐµÑ ÐµÐ³Ð¾ как 16-биÑное беззнаковое Ñелое ÑиÑло в 2 байÑаÑ
по ÑÐºÐ°Ð·Ð°Ð½Ð½Ð¾Ð¼Ñ ÑмеÑÐµÐ½Ð¸Ñ ÑÑого DataView
.
DataView.prototype.setUint32()
ÐÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑиÑло и ÑоÑ
ÑанÑÐµÑ ÐµÐ³Ð¾ как 32-биÑное беззнаковое Ñелое ÑиÑло в 4 байÑаÑ
по ÑÐºÐ°Ð·Ð°Ð½Ð½Ð¾Ð¼Ñ ÑмеÑÐµÐ½Ð¸Ñ ÑÑого DataView
.
DataView.prototype.setUint8()
ÐÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑиÑло и ÑоÑ
ÑанÑÐµÑ ÐµÐ³Ð¾ как 8-биÑное беззнаковое Ñелое ÑиÑло в байÑе по ÑÐºÐ°Ð·Ð°Ð½Ð½Ð¾Ð¼Ñ ÑмеÑÐµÐ½Ð¸Ñ ÑÑого DataView
.
const buffer = new ArrayBuffer(16);
const view = new DataView(buffer, 0);
view.setInt16(1, 42);
view.getInt16(1); // 42
СпеÑиÑикаÑии СовмеÑÑимоÑÑÑ Ñ Ð±ÑаÑзеÑами СмоÑÑиÑе Ñакже
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4