我正在使用 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 进行了测试,它们的行为方式相同)