1

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 编写的应用程序中创建“字节序安全”的最佳实践是什么?有什么解决方法吗?

4

2 回答 2

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"); 
}
于 2013-10-26T11:17:30.347 回答
1

根据这篇文章,字节序在 JavaScript 中是安全的

JavaScript 字节序编码?

查看对您的要求很有用的DataView对象(仍处于草稿中),因为它提供了littleEndian 布尔值

于 2012-11-10T20:24:04.123 回答