2012-12-28 21 views

Trả lời

13

Đơn giản chỉ cần đọc nó như là một byte và sau đó chuyển đổi sang một int.

byte in = udppacket.getByte(0); // whatever goes here 
int uint8 = in & 0xFF; 

bitmask là cần thiết, vì nếu không, giá trị với bit 8 được đặt thành 1 sẽ được chuyển thành int âm. Ví dụ:

This:         10000000 
Will result in: 11111111111111111111111110000000 

Vì vậy, khi bạn sau đó áp dụng bitmask 0xFF cho nó, số 1 hàng đầu sẽ bị hủy. Để biết thông tin của bạn: 0xFF == 0b11111111

+0

Cảm ơn bạn, điều này rất thông tin. Tôi đánh giá cao phản hồi của bạn – stackoverflow

+0

Cảm ơn! Nhiều đánh giá cao – milosmns

3

0xFF & number sẽ coi số đó là byte chưa ký. Nhưng kiểu kết quả là int

3

Bạn có thể lưu trữ 8-bit trong một byte Nếu bạn thực sự cần phải chuyển đổi nó vào một giá trị unsigned (và thường là bạn không), bạn có thể sử dụng một mặt nạ

byte b = ... 
int u = b & 0xFF; // unsigned 0 .. 255 value 
2

bạn có thể làm một cái gì đó như thế này:

int value = eightBits & 0xff; 

Nhà điều hành & (giống như tất cả các nhà khai thác nguyên trong Java) lên phôi eightBits một int (bằng cách đăng nhập mở rộng bit dấu). Vì điều này sẽ biến các giá trị lớn hơn 0x7f thành các giá trị âm int, bạn cần phải tắt tất cả trừ 8 bit thấp nhất.

1

Bạn chỉ có thể phân tích cú pháp thành short hoặc int, có đủ dải để chứa tất cả các giá trị của một byte chưa ký.

Các vấn đề liên quan