【发布时间】:2011-12-13 18:15:43
【问题描述】:
我正在使用 WebGL 来渲染二进制编码的网格文件。二进制文件以大端格式写出(我可以通过在十六进制编辑器中打开文件或使用 fiddler 查看网络流量来验证这一点)。当我尝试使用 Float32Array 或 Int32Array 读取二进制响应时,二进制被解释为 little-endian 并且我的值是错误的:
// Interpret first 32bits in buffer as an int
var wrongValue = new Int32Array(binaryArrayBuffer)[0];
我在http://www.khronos.org/registry/typedarray/specs/latest/ 中找不到对类型化数组默认字节顺序的任何引用,所以我想知道这是怎么回事?在使用类型化数组读取时,我是否应该假设所有二进制数据都应该是小端?
为了解决这个问题,我可以使用 DataView 对象(在上一个链接中讨论过)并调用:
// Interpret first 32bits in buffer as an int
var correctValue = new DataView(binaryArrayBuffer).getInt32(0);
“getInt32”等DataView函数默认读取大端值。
(注意:我使用 Google Chrome 15 和 Firefox 8 进行了测试,它们的行为方式相同)
【问题讨论】:
-
如果有人想知道,我认为答案是我应该使用 little-endian 编写文件。
-
这就是避免问题而不是解决问题。
标签: javascript endianness webgl typed-arrays arraybuffer