簡體   English   中英

如何使用XMLHttpRequest正確讀取二進制浮點數據?

[英]How to correctly read binary floating-point data using 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嗎?

編輯:在十六進制視圖中添加二進制文件的一小部分:

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和Endianness

您需要檢測字節順序並提取每個字節的數字字節,或者創建文件的兩個不同版本,檢測字節順序並為當前瀏覽器檢索正確的字節順序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM