javascript - 如何使用 XMLHttpRequest 正确读取二进制 float 据?

标签 javascript xmlhttprequest

我正在尝试将浮点值的二进制文件读入 JavaScript 中的数组。目前我正在这样做:

var mRequest = new XMLHttpRequest();
mRequest.open('GET', 'res/binary_float_data.bin');
mRequest.responseType = 'arraybuffer';

mRequest.onreadystatechange = function () {
    if (mRequest.readyState === 4) {

        // Get bytes
        var buffer = mRequest.response;
        var dataview = new DataView(buffer);

        // Create buffer (4 bytes / float)
        var mFloatArray = new Float32Array(buffer.byteLength / 4);

        // Copy floats
        for (var i = 0; i < mFloatArray.length; i++) 
        {
            mFloatArray[i] = dataview.getFloat32(i * 4); // At every 4th byte
        }

        console.log("Loaded "+mFloatArray.length+" floats");

        // Do something with mFloatArray
    }
};

mRequest.send();

但是,当我查看结果数组 (mFloatArray) 的最小值、最大值和平均值时,它们是不正确的。它们应该是:

min: -0.0094
max: 0.0081
avg: 1.3196e-04

相反,我得到:

min: -3.3985008792505584e+38
max: 0
avg: NaN

我确定二进制文件是正确的,我是否正确解析了 XMLHttpRequest?

编辑:在十六进制 View 中添加二进制文件的一小部分:

0002980: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0002990: 0000 0000 0000 0000 0000 0000 55df 11bc  ............U...
00029a0: afc5 13bc c0b2 15bc 4205 17bc a094 17bc  ........B.......
00029b0: e3d4 17bc cb41 18bc f2e6 18bc 464d 19bc  .....A......FM..
00029c0: bb94 18bc f6ca 16bc 29a5 14bc 0000 0000  ........).......
00029d0: 0000 0000 0000 0000 0000 0000 0000 0000  ................

编辑 2: 我使用 matlab 和“fwrite”命令制作了二进制文件,精度为“float32”。 http://www.mathworks.com/help/matlab/ref/fwrite.html

最佳答案

数据的字节顺序很重要:Javascript Typed Arrays and Endianness

您需要检测字节顺序并提取每个字节的字节数,或者创建两个不同版本的文件,检测字节顺序并为当前浏览器检索正确的版本。

关于javascript - 如何使用 XMLHttpRequest 正确读取二进制 float 据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17303785/

相关文章:

python - 使用日期范围迭代一系列带日期标记的 XHR 请求

javascript - 如何使用 window.history.pushState

javascript - 使用外部脚本结果填充本地 div

javascript - 当 Django 中的确认消息为假时什么也不做

ajax - 在 Access-Control-Allow-Origin 中为子域使用通配符

jQuery AJAX - 意外的标记 + 解析器错误

javascript - JavaScript 表达式中的多重赋值和语法解释

javascript - 错误: Java Script code在哪里

仅在 Internet Explorer 中中止 ajax 调用时出现 jQuery 错误

javascript - POST 请求提示已成功,但未发送数据