当前位置:  开发笔记 > 编程语言 > 正文

JavaScript Endian编码?

如何解决《JavaScriptEndian编码?》经验,为你挑选了3个好方法。

对SO的回应让我思考,JavaScript是否保证跨操作系统和浏览器的某种字节序编码?

或者换一种方式是在JavaScript中对整数"安全"进行按位移位?



1> Rob Kennedy..:

移位是安全的,但你的问题是有缺陷的,因为无论如何,字节顺序不会影响位移操作.在所有语言的big-endian和little-endian系统中,左移是相同的.(右移可能不同,但仅由于符号位的解释,而不是任何位的相对位置.)

当您可以选择将某些内存块解释为字节或更大的整数值时,字节顺序才会发挥作用.通常,Javascript不会为您提供该选项,因为您无法访问任意内存块,尤其是不能访问变量占用的内存块.类型化数组以字节序敏感的方式提供数据视图,但排序取决于主机系统; 对于所有可能的Javascript主机环境,它不一定相同.

Endianness描述物理存储顺序,而不是逻辑存储顺序.从逻辑上讲,最右边的位始终是最低位.该位的字节是否位于最低内存地址是一个完全独立的问题,只有当您的语言暴露出"最低内存地址"这样的概念时才会发生这种情况,而Javascript则不然.类型化数组,但仅在类型化数组的上下文中; 他们仍然无法访问任意数据的存储.



2> 小智..:

其中一些答案是过时的,因为在使用类型化数组时,字节序可能是相关的!考虑:

var arr32 = new Uint32Array(1);
var arr8 = new Uint8Array(arr32.buffer);
arr32[0] = 255;
console.log(arr8[0], arr8[1], arr8[2], arr8[3]);

当我在Chrome的控制台中运行它时,它会产生255 0 0 0,表明我的机器是小端的.但是,默认情况下,类型化数组使用系统字节顺序,因此您可能会看到0 0 0 255您的计算机是否为big-endian.


为什么不呢?这正是[正是草案规范应该做的](http://www.khronos.org/registry/typedarray/specs/latest/#2.1).

3> Michael Hare..:

是的,他们很安全.虽然你没有获得速度优势,但你可能希望因为JS位操作是" 黑客 ".


我读了那个链接.我不同意其中一些.关于做一个〜0的一点似乎有误导性.你得到32位,它总是签名.
推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有