我必须读取一个二进制文件,据说是编码的4 byte single format
,从来没有使用二进制数据,我不知道这是什么意思。
我可以在JavaScript中读取包含二进制数据的文件:
d = new FileReader();
d.onload = function (e) {
var i, len;
// grab a "chunk"
response_buffer = e.target.result.slice(0, 1024);
view = new DataView(response_buffer);
for (i = 0, len = response_buffer.byteLength; i < len; i += 1) {
// hmhm
console.log(view.getUint8(i));
}
}
d.readAsArrayBuffer(some_file);
从0到1023运行循环,我在控制台上得到数字,但我不知道这是否是我解码的数据:-)
:
什么是4字节单格式,我如何正确访问数据?在"人类可理解的语言"中,getUint8()
和getint8()
或getInt32()
有什么区别?
谢谢!
4字节单格式在计算机科学中不是一个通常理解的术语。
如果你期望你的文件是一系列单精度浮点数,那么我可能会猜测"4字节单格式"意味着单精度浮点数,因为每个都是4字节长。
您需要使用getFloat32()
从二进制流中解析单精度浮点数。
如果你想用getFloat32()
解析1024个数字,那么你需要1024*4个字节,并且你需要每次将for
循环推进4个字节,因为getFloat32()
一次处理4个字节:
d = new FileReader();
d.onload = function (e) {
var i, len;
// grab a "chunk"
response_buffer = e.target.result.slice(0, 1024 * 4);
view = new DataView(response_buffer);
for (i = 0, len = response_buffer.byteLength; i < len; i += 4) {
// hmhm
console.log(view.getFloat32(i));
}
}
d.readAsArrayBuffer(some_file);
另外,请注意IE10和IOS 5没有.slice()
方法的ArrayBuffer如果你打算在一个一般的网页中使用它