2009-04-27 10 views
5

Seri bağlantı noktasını kullanan başka bir sistemden veri okuyorum. 133 baytlık paketler okuyorum. İkinci bayt, paket numarasıdır ve üçüncü bayt, paket numarasının negatif değeridir.Java'daki negatif bayt değerleri -128'den daha az nasıl okunur?

sorun ben ne yapmalıyım 127.

olarak değeri verecektir (byte aralığı dışında) -129 okumaya çalıştığınızda tip byte -128 ile 127 arasında bir dizi olmasıdır böylece -129 alabilirim?

cevap

6

127 oluyorsunuz çünkü bir bayt yalnızca 8 bittir ve bu nedenle değer sarılır. -129 bir java baytına sığmaz. Belirli bir değişkendeki -129'a uymak istiyorsanız, programınızı en azından şort kullanacak şekilde değiştirmeniz gerekecektir.

+0

(int) (byteval & 0xFF) gibi kısa bir değer okumalısınız, doğru değerleri + 127'den sonra, yani -128'i 128 olarak döndürecektir, ancak ben, null değerlere ulaşamamışım –

+0

Evet. Bayt, herhangi bir 256 değerin bir aralığı olabilir. Eğer baytın sıfır ya da daha büyük olacağını biliyorsanız, 0 ile 255 arasında bir yer olabilir. "Bayt ve 0xFF" diyerek, derleyiciye imzasız bir tamsayı olduğunu söylersiniz, yani en düşük sayıdır sıfırdır. Önceden negatif olduğu bilinen bir bayt değeriniz olduğunu mu söylüyorsunuz? –

8

Bayt değerlerinin sahip olmasını istediğiniz aralığı belirlemelisiniz. Eğer menzil -129'dan 126'ya kadar beklerseniz kullanabilirsiniz.

int min = 129; 
int i = ((b + min) & 0xFF) - min; 

BTW Sen 256'dan fazla değere sahip olamaz.

4

Protokolü bilmediğim için burada biraz tahmin etmeliyim.

Belki de her iki değer de protokolde imzasız (pozitif) bayt olarak ele alınmalıdır, bunları daha sonra ints'ye dönüştürebilirsiniz.

// 0-255 
int plus = (int)(plusByte & 0xFF); 

// -255 - 0 
int minus = 0 - (int)(minusByte & 0xFF); 

Bu Us Pat 6313763 ile ilişkili midir? Ama paketin uzunluğu sabit olduğundan, anlamıyorum.

"Büyük" sayıların bir bayt cinsinden 256 aralığından saklanması mümkün değildir. Belki de protokolü yanlış anladınız ve iki baytta depolanan int yüksek ve düşük bitlerini mi?

1

-128'den küçük değerler, imzalı bir bayta sığmaz.

İlgili konular