2013-03-04 44 views
11

Tôi có một chuỗi trong Java biểu thị giá trị 16 bit đã ký trong HEX. Chuỗi này có thể bằng bất cứ thứ gì từ "0000" đến "FFFF".Chuỗi thập lục phân 16 bit cho chữ ký int trong Java

Tôi sử dụng Integer.parseInt("FFFF",16) để chuyển đổi thành số nguyên. Tuy nhiên, điều này trả về một giá trị chưa ký (65535).

Tôi muốn nó trả lại giá trị đã ký. Trong ví dụ cụ thể này, "FFFF" phải trả lại -1.

Tôi làm cách nào để đạt được điều này? Kể từ khi một giá trị 16-bit của nó, tôi nghĩ đến việc sử dụng Short.parseShort("FFFF",16) nhưng điều đó nói với tôi rằng tôi ra khỏi phạm vi. Tôi đoán parseShort() kỳ vọng dấu âm.

Trả lời

13

Bạn có thể cast int trở về từ Integer.parseInt() để một đoạn ngắn:

short s = (short) Integer.parseInt("FFFF",16); 
System.out.println(s); 

Kết quả:

-1 
+0

@AndreasFester, tại sao điều này đòi hỏi diễn viên hơn nữa càng ngắn ? – Rachael

+2

@Rachael Vì giá trị được trả về bởi 'Integer.parseInt' vẫn là giá trị' int' (32 bit) '' - cho '0xFFFF', đó là' 65535'. Bằng cách gán nó vào một 'short', 16 bit trên được loại bỏ một cách hiệu quả và bit 15 được lấy làm bit dấu cho giá trị ngắn, dẫn đến' -1' (tất cả các bit là 1). Các diễn viên là cần thiết để nói với trình biên dịch rằng sự mất mát của bit được dự định - mà không có diễn viên, trình biên dịch sẽ phàn nàn về 'có thể mất mát chuyển đổi từ int để ngắn ' –

+0

@AndreasFester cảm ơn bạn đã giải thích tuyệt vời. – Rachael

2

thử

int i = (short) Integer.parseInt("FFFF", 16); 
+0

Cảm ơn sự giúp đỡ! – Dimme

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