Не уверен, что это полезно.Но просто для перекрестной проверки подлинности кода.
Я написал несколько тестовых примеров, чтобы сначала преобразовать число в буфер массива и использовать значение буфера массива для его декодирования.
var hex = 445566..toString(16);
var buffer = new ArrayBuffer(16);
var dataView = new DataView(buffer);
dataView.setInt32(0, '0x'+ hex);
console.log(dataView.getInt32(0)); //445566
//Using the uint16array data generated by the above code
var data = [0, 6, 204, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
var buf = new ArrayBuffer(16);
var view = new DataView(buf);
data.forEach(function (b, i) {
view.setUint8(i, b % 256);
});
var num = view.getInt32(0);
console.log(num);//445566
function numberToArrayBuffer(value) {
const view = new DataView(new ArrayBuffer(16))
for (var index = 15; index >= 0; --index) {
view.setUint8(index, value % 256)
value = value >> 8;
}
return view.buffer
}
console.log(numberToArrayBuffer(445566)) // Uint8Array(16) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 204, 126]
Оба результата одинаковы.Просто ваш код выдает результат в формате с прямым порядком байтов, а мой - в формате с прямым порядком байтов.
Таким образом, вы придерживались правильного подхода.Что касается производительности, я не думаю, что есть большое влияние