最佳答案
我使用 WebGL 来呈现二进制编码的网格文件。二进制文件以 big-endian 格式写出(我可以通过在十六进制编辑器中打开该文件或使用 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/中找不到任何关于类型化数组的默认 endianness 的引用,所以我想知道这是怎么回事?在使用类型化数组读取时,我是否应该假设所有二进制数据都应该是 little-endian?
为了解决这个问题,我可以使用 DataView 对象(在前面的链接中讨论过)并调用:
// Interpret first 32bits in buffer as an int
var correctValue = new DataView(binaryArrayBuffer).getInt32(0);
DataView 函数(如“ getInt32”)默认情况下读取 big-endian 值。
(注意: 我使用谷歌 Chrome 15和 Firefox 8进行了测试,它们的表现都是一样的)