0

我必须读取一个二进制文件,据说该文件是经过编码的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

1 回答 1

1

4 字节单格式在计算机科学中不是一个普遍理解的术语。

如果您可以期望您的文件是一系列单精度浮点数,那么我可能会猜测“4 字节单一格式”表示单精度浮点数,因为其中每一个都是四个字节长。

您将希望使用getFloat32()从二进制流中解析单精度浮点数。


如果您想用 解析 1024 个数字getFloat32(),那么您需要 1024*4 字节,并且for每次需要将循环推进四个字节,因为一次getFloat32()处理四个字节:

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);

.slice()另外,请注意,如果您打算在一般网页中使用 ArrayBuffer ,IE10 和 IOS 5 没有此方法。

于 2014-05-24T12:49:17.800 回答