2013-07-22 7 views
3

Думал, что я понял, как работает Float32Array, но похоже, что я не совсем там. В простейшем возможном примере:несоответствие между Float32Array и DataView

buffer = new ArrayBuffer(128); 
dataView = new DataView(buffer); 
floatArray = new Float32Array(buffer); 

dataView.setFloat32(8, 7); 
console.log(floatArray[2]); //prints gibberesh 

Как я понял, представление данных, следует установить поплавок, начиная с 8-го байта, чтобы быть 7, поэтому третий поплавка в массиве флоат Я хотел бы ожидать, чтобы быть 7.

Что мне здесь не хватает?

Благодаря

+0

Вы имеете в виду 'dv.setFloat32 (8, 7);'? – sabof

+0

oops, fixed typo, также index at 2, not 3 :( – Nick

ответ

1

Это делает его работу, последний параметр является littleEndian

dataView.setFloat32(8, 7, true); 

Это может быть лучше, хотя я не могу сказать наверняка. Предположительно, Float32Array всегда использует малое имя системы, в то время как DataView может использовать и.

var littleEndian = (function() { 
    var buffer = new ArrayBuffer(2); 
    new DataView(buffer).setInt16(0, 256, true); 
    return new Int16Array(buffer)[0] === 256; 
})(); 

dataView.setFloat32(8, 7, littleEndian); 
+0

huh, funny, что они не оба по умолчанию делают одно и то же. Спасибо! – Nick

+0

У меня сложилось впечатление, что * Array предназначен для вычислений, а DataView для двоичных файлы. – sabof

Смежные вопросы