2012-07-07 42 views
30

Vì vậy, Trong Java, bạn biết làm thế nào bạn có thể khai báo các số nguyên như thế này:Phân tích cú pháp một chuỗi thập lục phân thành một số nguyên ném ra một NumberFormatException?

int hex = 0x00ff00; 

Tôi nghĩ rằng bạn sẽ có thể đảo ngược quá trình đó. Tôi có mã này:

Integer.valueOf(primary.getFullHex()); 

nơi chính là đối tượng của lớp Màu tùy chỉnh. Hàm khởi tạo của nó lấy một số nguyên cho độ mờ (0-99) và một chuỗi thập lục phân (ví dụ: 00ff00).

Đây là getFullHex phương pháp:

public String getFullHex() { 
    return ("0x" + hex); 
} 

Khi tôi gọi phương pháp này nó mang lại cho tôi đây NumberFormatException:

java.lang.NumberFormatException: For input string: "0xff0000" 

Tôi không thể hiểu được những gì đang xảy ra. Ai đó có thể xin giải thích?

Trả lời

75

Điều này có hữu ích không?

Integer.parseInt("00ff00", 16) 

16 có nghĩa là bạn nên giải thích các chuỗi như 16-based (hệ thập lục phân). Bằng cách sử dụng 2 bạn có thể phân tích cú pháp số nhị phân, 8 là viết tắt của bát phân. 10 là mặc định và phân tích cú pháp số thập phân.

Trong trường hợp của bạn Integer.parseInt(primary.getFullHex(), 16) sẽ không hoạt động do tiền tố 0x được thêm trước bởi getFullHex() - hãy thoát khỏi và bạn sẽ ổn.

+1

Cảm ơn bạn! Tôi không biết rằng 'Integer.parseInt (..)' có thể lấy một tham số khác! Cảm ơn cho sạch nó lên cho tôi! – mattbdean

+0

Oh người đàn ông tôi là nạn nhân của điều này cũng – JohnMerlino

+0

không hoạt động java.lang.NumberFormatException: int không hợp lệ: "0x920B540C", color2 = Integer.parseInt (color_2,16); (với argbA) – delive

1

này nên làm điều đó:

String hex = "FA"; 
int intValue = Integer.parseInt(hex, 16); 

Và nếu bạn muốn tạo ra đại diện hex của một số nguyên, sử dụng

String hex = Integer.toHexString(12); 
+0

'toHexString()'? đó là gì? –

+0

@JeremyHolovacs kiểm tra điều này http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Integer.html#toHexString(int) – GETah

+0

Duh ... cảm thấy ngu ngốc bây giờ, tôi nghĩ rằng điều này là aC# question ... –

3

Các parseInt phương pháp chỉ chấp nhận một phần số, không phải bất kỳ loại của chỉ báo "cơ sở" chẳng hạn như "0x" cho hệ thập lục phân hoặc "0" cho bát phân. Sử dụng nó như thế này

int decimal = Integer.parseInt("1234", 10); 
int octal = Integer.parseInt("1234", 8); 
int hex = Integer.parseInt("1234", 16); 
37

Integer.valueOf (string) giả định một biểu diễn thập phân. Bạn phải chỉ định rằng số ở định dạng thập lục phân, ví dụ:

int value = Integer.valueOf("00ff0000", 16); 

Lưu ý rằng Integer.valueOf (chuỗi, 16); không chấp nhận tiền tố 0x.Nếu chuỗi của bạn chứa tiền tố 0x, bạn có thể sử dụng Integer.decode ("0x00ff0000");

+9

Làm thế nào là 'Integer.decode' không phải là câu trả lời đúng? – ubiquibacon

+0

Xin chào, tính năng này chỉ hoạt động cho 00ff0000 không phải cho 80ff0000. Tôi có chuỗi như String hex = "803BB9FF"; và tôi muốn bí mật điều này thành màu int = 0x803BB9FF, hãy giúp –

+0

@AshishSahu Bạn không thể giúp khi bạn không mô tả điều gì xảy ra và điều bạn mong đợi sẽ xảy ra. 0x803BB9FF là -2143569409 (vì int trong Java được ký). Vì vậy, những gì "không làm việc" về -2143569409? – nos

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