Вычисление шестнадцатеричных байтов из Java в JavaScriptJAVA

Программисты JAVA общаются здесь
Anonymous
Вычисление шестнадцатеричных байтов из Java в JavaScript

Сообщение Anonymous »

При попытке преобразовать приведенный ниже код Java в JavaScript возникает несоответствие, результат немного отличается.

Код: Выделить всё

byte ex[] = new byte[26];
bits = 304;
for (int loop=0; loop>(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"
Вы можете увидеть ошибочные 48 и 1 в JavaScript. 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. Когда решение будет найдено, я удалю один из этих вопросов.


Подробнее здесь: https://stackoverflow.com/questions/532 ... javascript

Вернуться в «JAVA»