【问题标题】:shift ArrayBuffer so I can access Float32 values移动 ArrayBuffer 以便我可以访问 Float32 值
【发布时间】:2023-04-09 04:10:01
【问题描述】:

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

我已经能够获得第一个三角形值,但我无法读取下一个 float32 值数组,因为在获得 Uint16 值后偏移量不再可被 4 整除。 有什么方法可以对数组缓冲区进行左移操作,或者有什么方法可以继续读出值?

【问题讨论】:

  • 您是否尝试过使用DataView
  • 是的,我尝试过使用 DataView 并尝试将数组复制到新缓冲区,但我不断收到错误消息,即长度不正确或运行并返回未定义的所有内容。

标签: javascript bit-shift arraybuffer typed-arrays


【解决方案1】:

你可以通过复制把它们拉出来

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

【讨论】:

  • 切片方法是我尝试过的一种方法,但我只设置了 (numFloats * 4) 而不是 (offset + numFloats * 4)。进行此更改使这对我有用。谢谢
  • 我在第一次写例子的时候也犯了同样的错误?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-23
  • 2014-05-01
相关资源
最近更新 更多