使JavaScript Typed Arrays“Endian Safe”的最佳做法是什么?

时间:2012-11-10 20:17:16

标签: javascript cross-platform endianness typed-arrays

JavaScript类型数组在字节顺序方面存在危险。

假设您有这样的功能:

var encodeFloat32 = (function() {
  var arr  = new Float32Array( 1 );
  var char = new Uint8Array( arr.buffer );
  return function( number ) {
    arr[0] = number;
    return String.fromCharCode( char[0], char[1], char[2], char[3] );
  };
}());

如果您要在Big Endian系统上运行它,这是一个潜在危险的函数,因为您将ArrayBuffers字节提交到“fromCharCode”方法的顺序。

因此,您需要创建某种端序安全性,以使您的代码与平台无关。

在使用JavaScript编写的应用程序中创建“endian安全”的最佳做法是什么?有没有解决方法?

2 个答案:

答案 0 :(得分:1)

根据这篇帖子,endianess在JavaScript中是安全的

<击> JavaScript Endian Encoding?

查看DataView对象(仍在草稿中)对您的要求有用,因为它提供了littleEndian boolean

答案 1 :(得分:1)

我在javascript中使用这样的函数来检查(我设置字符串效果,我通常只使用bool或类似):

function checkEndian(){
    var a = new ArrayBuffer(4);
    var b = new Uint8Array(a);
    var c = new Uint32Array(a);
    b[0] = 0xa1;
    b[1] = 0xb2;
    b[2] = 0xc3;
    b[3] = 0xd4;
    if(c[0] == 0xd4c3b2a1) return "little endian";
    if(c[0] == 0xa1b2c3d4) return "big endian";
    else throw new Error("Something crazy just happened"); 
}