Search code examples
javascriptpythonbinaryfiles

Javascript Float32Array file


I want to read a binary file of float32 with javascript (written by python). I get the wrong values:

0,-428443616,-6.332091191811711e-23,-429492128,4.600602988224807e-41,0,0,0,4.618539608568165e-41,1.793662034335766e-43,-428443616,4.17232...

instead of right values:

0.00000000 0.80000001 -0.6000000 0.10000000...

code:

var mRequest = new XMLHttpRequest();
var url="https://storage.googleapis.com/crackling-torch-8396.appspot.com/ac395516-96d0-4533-8e0e-efbc681902ee/studies/-KgPah7nxgHsVB26Nlaf/meshes/-KgPayhUOPYlMx12mn7m/shapes/GEOMFACE1_n.bin";

mRequest.open('GET', url);
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("mFloatArray "+mFloatArray);
        // Do something with mFloatArray
    }
};

mRequest.send();

Solution

  • Just tested, it is a matter of little-endian order of the bytes. it works for me, with a little modification, parameter true for little-endian:

    mFloatArray[i] = dataview.getFloat32(i * 4, true); // At every 4th byte