Обработка побитового ИЛИ сбоя - PullRequest
0 голосов
/ 18 декабря 2011

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

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. Есть мысли?

1 Ответ

3 голосов
/ 18 декабря 2011

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

Вам нужно добавить немного foo & 255. В ваш код.

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

...