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安全”的最佳做法是什么?有没有解决方法?
答案 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");
}