移动ArrayBuffer以便我可以访问Float32值

时间:2019-02-13 03:42:10

标签: javascript bit-shift arraybuffer typed-arrays

我正在尝试读取.stl文件 stl文件格式的前80个字节是字符串 然后是float32,即文件中存储的三角形数量。 然后对于每个三角形12个float32值, 然后是Uint16 然后重复12个Float32和1个Uint16模式。

我已经能够获得第一个三角形值,但是我无法读出下一个float32值数组,因为在获得Uint16值之后,偏移量不再可以被4整除。 有什么方法可以对arraybuffer进行左移操作,也可以通过某种方式继续读取值?

1 个答案:

答案 0 :(得分:2)

您可以通过复制将其拉出

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));