2017-03-29 2 views
0

Je veux lire un fichier binaire de float32 avec javascript (écrit par python). Je reçois les mauvaises valeurs:Javascript Float32Array fichier

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

au lieu des valeurs de droite:

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(); 
+0

Résultat attendu est connecté à 'console' ici – guest271314

+0

la question que j'edited de faire plus clairement quelles valeurs sont erronées – daniel

Répondre

2

Tout testé, il est une question d'ordre peu endian des octets . ça marche pour moi, avec une petite modification, le paramètre vrai pour little-endian:

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