gpt4 book ai didi

javascript - Node - 如何将类型化数组写入具有指定字节顺序的二进制文件

转载 作者:行者123 更新时间:2023-12-03 02:05:26 24 4
gpt4 key购买 nike

我有一个类型化数组,我想将其写入二进制文件。我需要它采用大端字节顺序,但我可能不会(通常不会)在大端机器上。如何从类型化数组获取二进制文件?

最佳答案

如您所知,在 javascript 中强制执行字节顺序的方法是使用 DataView看法。创建缓冲区的 DataView View 后,您可以按大端字节顺序或小端字节顺序设置并从中获取数据。

这是一个将类型化数组(可能是小端或大端字节顺序)转换为大端字节顺序的 Uint8Array(相当于 Node 的"file"缓冲区)的示例。请注意,由于 dataView 只是底层缓冲区的 View ,因此原始数组 arr 现在已进行字节交换,我们将写入到文件。

arr = new Float32Array([42]) // one value
dataView = new DataView(arr.buffer)
dataView.setFloat32(0, arr[0], false /* big-endian */)
buf = new Uint8Array(arr.buffer)

现在您可以将该数组传递到 Node 文件写入方法中,因为 Uint8Array 与 Node 的 Buffer 对象兼容。例如,如果您已经打开了一个文件并拥有它的 fd,那么您可以执行如下操作:

fs.writeSync(fd, buf)

为了完整起见,下面是处理您实际使用 Float32 类型数据的循环的示例代码:

arr = new Float32Array([...]) // some initial data
...
dataView = new DataView(arr.buffer)
byteNum = 0;
for (let i = 0; i < arr.length; i++) {
dataView.setFloat32(byteNum, arr[i]);
byteNum += Float32Array.BYTES_PER_ELEMENT;
}

buf = new Uint8Array(arr.buffer)
fs.writeSync(fd, buf)

请注意,在上面我没有将 false 传递给 setFloat32,因为这是默认值。

<小时/>

(有关本文写作部分的更多详细信息,请参阅:Writing files in Node.js)

关于javascript - Node - 如何将类型化数组写入具有指定字节顺序的二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49830292/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com