有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

从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) 个答案