在尝试将下面的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。找到解决方案后,我将删除以下问题之一。