从Java到Javascript的十六进制字节计算

时间:2018-11-13 23:51:13

标签: javascript java arrays

在尝试将下面的Java代码转换为JavaScript时出现不匹配的情况,输出略有不同。

Java

byte ex[] = new byte[26];
bits = 304;
for (int loop=0; loop<8; ++loop) {
    ex[ex.length-1-loop] = (byte)(0xFF&(bits>>(loop*8)));
    System.out.println("Ex value: " + ex[ex.length-1-loop]);
}

控制台输出:

Ex value: 48
Ex value: 1
Ex value: 0
Ex value: 0
Ex value: 0
Ex value: 0
Ex value: 0
Ex value: 0

JavaScript

var ex = new Int8Array(26);
var bits = 304;
for (var loop = 0; loop < 8; ++loop) { 
    ex[ex.length - 1 - loop] = (0xFF & (bits >> (loop * 8)));
    console.log("Ex value: " + ex[ex.length-1-loop]);
} 

控制台输出:

> "Ex value: 48"
> "Ex value: 1"
> "Ex value: 0"
> "Ex value: 0"
> "Ex value: 48"
> "Ex value: 1"
> "Ex value: 0"
> "Ex value: 0"

您可以在JavaScript中看到错误的48和1。 Java运行正常,我需要JS来匹配它。

对于错误的计算,循环是4(对于48)和5(对于1)。两者都必须为零。

话虽这么说,但我没有将值赋给数组就再次尝试了Java,并获得了JavaScript的SAME。我不知道为什么将其分配给字节数组会有所作为:

byte c = (byte)(0xFF&(304>>(4*8)));
int d = (byte)(0xFF&(304>>(5*8)));
System.out.println("c: " + c);
System.out.println("d: " + d);

输出:

c: 48
d: 1

在时间压力下,我无法花很多时间去深入研究它,所以我希望这个伟大的社区能够对此有所启发!

谢谢

编辑

我深入研究了一下,发现似乎正在发生什么,请参阅Java hex calculation。找到解决方案后,我将删除以下问题之一。

0 个答案:

没有答案