从Java到JavaScript的十六进制字节计算
当试图将下面的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相同的结果。我不明白为什么将其分配给字节数组会产生不同:
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) 个答案