2013-03-22 37 views
7

Tất cả những gì tôi cần làm là chuyển đổi một mảng hai byte chưa ký thành một số nguyên. Tôi biết, tôi biết, Java không có các kiểu dữ liệu chưa ký, nhưng các số của tôi nằm trong các byte chưa ký tự giả.Java unsigned byte [2] để int?

byte[] b = {(byte)0x88, (byte)0xb8}; // aka 35000 
int i = (byte)b[0] << 8 | (byte)b[1]; 

Vấn đề không chuyển đổi đúng, bởi vì nó cho rằng đó là byte đã ký ... Làm cách nào để chuyển đổi nó thành int?

+0

Chuyển thành int rồi thực hiện chuyển dịch. – Apurv

+0

Nó không thực sự trùng lặp. Câu hỏi được liên kết là khoảng 2 byte để int byte không được ký. Bạn có thể suy ra rằng bạn cũng phải che dấu byte đầu tiên từ câu trả lời đầu tiên, nhưng điều đó không rõ ràng chút nào. Tôi không hiểu cách họ có thể đánh dấu câu trả lời này là trùng lặp. Nó được kiểm tra trước khi được chấp nhận? Chúng tôi có thể báo cáo điều này không? – BaptisteL

Trả lời

17

Không có số không dấu nào trong Java, byte hoặc int hoặc bất kỳ thứ gì khác. Khi các byte được chuyển đổi thành int trước khi được bithifted, chúng được mở rộng ký hiệu, tức là 0x88 =>0xFFFFFF88. Bạn cần phải che giấu những gì bạn không cần.

Hãy thử điều này

int i = ((b[0] << 8) & 0x0000ff00) | (b[1] & 0x000000ff); 

và bạn sẽ nhận 35000.

2

Bạn có thể sử dụng

int i = ((b[0] & 0xFF) << 8) | (b[1] & 0xFF); 

hoặc

int i = ByteBuffer.wrap(b).getChar(); 

hoặc

int i = ByteBuffer.wrap(b).getShort() & 0xFFFF; 
Các vấn đề liên quan