【发布时间】:2016-02-29 23:13:13
【问题描述】:
目前,当二进制文件包含 64 位浮点时,我会这样做:
fs.open('doubles.bin', 'r', (err, fd) => {
if (err) reject(err);
const buf = new Buffer(size);
fs.read(fd, buf, 0, size, start, (err2) => {
if (err2) reject(err2);
const f32 = new Float32Array(buf.buffer);
const data = Array.prototype.slice.call(f32);
resolve({ id, data });
});
});
(二进制是一个简单的数字列表。它们没有被任何东西分隔)
我认为这是可行的,因为 Float32Array 视图需要读取标准 JavaScript Numbers,其大小为 64 位。
一旦二进制文件包含 32 位数字,我只会从中得到垃圾(NaNs 和错误的数字)。
如何使用 JavaScript 读取包含 32 位浮点数的二进制文件并将其转换为数组?
【问题讨论】:
-
“我认为这是可行的,因为 Float32Array 视图需要读取标准的 JavaScript 数字,它们的大小为 64 位。”。不,TypedArrays 不是那样工作的。如果我的答案不起作用,请提供示例数据。它是如何产生的?也许字节顺序是错误的。
-
您的答案看起来不错,但我无法从文件中得到任何有意义的信息。这是一个示例:dl.dropboxusercontent.com/u/8538734/doubles.bin
-
您确定 .bin 文件是 32 位浮点数吗?你期待什么样的数字?比如哪个范围?请参阅我的更新答案。
标签: javascript node.js