сдвиг ArrayBuffer, чтобы я мог получить доступ к значениям Float32 - PullRequest
0 голосов
/ 13 февраля 2019

Я пытаюсь прочитать файл .stl, в формате файла stl первые 80 байтов являются строкой, а затем float32 - номером треугольника, хранящегося в файле.затем для каждого треугольника 12 значений float32, затем повторяется Uint16, затем шаблон 12 Float32 и 1 Uint16.

Мне удалось получить значения первого треугольника, но я не могу прочитать следующий массив значений float32out, потому что смещение больше не делится на 4 после получения значения Uint16.Есть ли способ выполнить операцию сдвига влево на массивном буфере или какой-либо способ продолжить считывание значений?

1 Ответ

0 голосов
/ 13 февраля 2019

Вы можете вытащить их, сделав копию

const src = new Uint8Array([1,2,3,4,5,0,0,246,66,0,0,144,64,14,15,16,17,18,19]);
const offset = 5;
const numFloats = 2;
const floats = new Float32Array(src.slice(offset, offset + numFloats * 4).buffer);

console.log(floats);

Вы также можете использовать DataView

const src = new Uint8Array([1,2,3,4,5,0,0,246,66,0,0,144,64,14,15,16,17,18,19]);
const offset = 5;
const dataview = new DataView(src.buffer);
const littleEndian = true;

console.log(dataview.getFloat32(offset, littleEndian));
console.log(dataview.getFloat32(offset + 4, littleEndian));
...