我正在使用WebGL来渲染一个二进制编码的网格文件。该二进制文件以大端格式写出(我可以通过在十六进制编辑器中打开文件或使用fiddler查看网络流量来验证)。当我尝试使用Float32Array或Int32Array读取二进制响应时,它被解释为小端,并且我的值是错误的:
// 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);
DataView函数(如“getInt32”)默认读取大端存储的值。
(注意:我已经测试过使用Google Chrome 15和Firefox 8,它们的行为都相同)