0

Я поймаю последовательный поток и попытаюсь взять два байта и превратить их в подписанный короткий текст в разделе Обработка. Код прост, но есть случайный сбой при объединении двух байтов. Это код с большим количеством внутренних отпечатков.Обработка побитового ИЛИ сбой

println(hex(inBuffer[i-2]) + " " + hex(inBuffer[i-3])); 
x = inBuffer[i-2]; 
println(hex(x)); 
x <<= 8; 
println(hex(x)); 
println(hex(inBuffer[i-3])); 
x = (short) (x | inBuffer[i-3]); 
println(hex(x)); 
for (int j=15; j>=0; j--){ 
    print(((1<<j) & x)>>j); 
} 
println(""); 
println(x); 
println(""); 

Иногда я получаю это, это здорово:

41 27 
00000041 
00004100 
27 
00004127 
0100000100100111 
16679 

это здорово! Но иногда бывает так:

41 A7 
00000041 
00004100 
A7 
FFFFFFA7 
1111111110100111 
-89 

Что еще не так. Я не знаю почему (0xA7 | 0x004100) = 0xFFFFFFA7. Любые мысли?

ответ

3

Подсказка: A7 - это число> 128. И Java обрабатывает байты как подписанные.

Вам необходимо добавить в код код foo & 255.

например. Проверьте исходный код DataInputStream.readLong().

Смежные вопросы