2013-05-07 4 views
0

Я знаю, что для этого вопроса существует N потоков, но некоторые люди используют разные и разные методы для преобразования байта в int. Правильно ли это, что я пишу? Хекс до int или hex до десятичного? Какой из них правильный?Java byte to int

В любом случае, почему я получаю 4864 вместо 19?

byte[] buffer = .... 
buffer[51] = 0x13; 
System.out.println(buffer[51] << 8); 

ответ

4

Правильно ли это то, что я пишу?

код вы опубликовали делает неявное преобразование int в String, но это будет отображать его в десятичной системе счисления. Важно понимать, что число не равно ни шестнадцатеричному, ни десятичному - это просто число. Один и тот же номер может быть преобразован в различные текстовые представления, и именно тогда это имеет значение. Точно так же вы можете выразить то же самое число с разными литералов, так что эти два утверждения точно эквивалентны:

int x = 16; 
int x = 0x10; 

Во всяком случае, почему я получаю 4864 вместо 19

Поскольку вы явно сдвигая значение осталось 8 бит:

buffer[51] << 8 

это в основном умножаются на 256 и 19 * 256 4864.

2

вы получаете 4864 в результате, потому что 4864 - это 0x1300 в шестнадцатеричном формате. , если вы ожидаете 19 (0x13) в результате, я думаю, вы пытаетесь сделать круговое смещение.

вы можете сделать это с помощью написания так,

/*hex 0x13 (19 in decimal) is assigned to buffer[51] as int*/ 
    buffer[51] = 0x13; 
    System.out.println(Integer.rotateRight(buffer[51], 8));