2012-07-07 24 views
30

tak, to w Javie, wiesz, w jaki sposób można zadeklarować całkowitymi tak:Parsowanie ciągu szesnastkowego do liczby całkowitej powoduje wygenerowanie wyjątku NumberFormatException?

int hex = 0x00ff00; 

Pomyślałem, że powinieneś być w stanie odwrócić ten proces. Mam ten kod:

Integer.valueOf(primary.getFullHex()); 

gdzie primary jest obiektem niestandardowej klasy kolorów. Jego konstruktor przyjmuje wartość Integer dla nieprzezroczystości (0-99) i ciągu szesnastkowego (np. 00ff00).

Jest to metoda getFullHex:

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

Kiedy zadzwonić ta metoda daje mój to NumberFormatException:

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

nie mogę zrozumieć, co się dzieje. Czy ktoś może mi wyjaśnić?

Odpowiedz

75

Czy to pomoże?

Integer.parseInt("00ff00", 16) 

16 oznacza, że ​​należy interpretować jako ciąg 16-opartym (szesnastkowym). Używając 2 możesz parsować liczbę binarną, 8 oznacza ósemkową. 10 jest domyślnie i przetwarza liczby dziesiętne.

W twoim przypadku nie będzie działał ze względu na prefiks 0x poprzedzony getFullHex() - pozbądź się go, a wszystko będzie dobrze.

+1

Dziękujemy! Nie wiedziałem, że 'Integer.parseInt (..)' może wziąć inny parametr! Dzięki za posprzątanie tego za mnie! – mattbdean

+0

Oh człowieku byłem ofiarą tego również – JohnMerlino

+0

nie działa java.lang.NumberFormatException: Invalid int: "0x920B540C", color2 = Integer.parseInt (color_2,16); (z argbA) – delive

1

ten powinien zrobić:

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

A jeśli chcesz wygenerować reprezentację hex liczby całkowitej, należy

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

'toHexString()'? co to jest? –

+0

@JeremyHolovacs sprawdź to http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Integer.html#toHexString(int) – GETah

+0

Duh ... czuć się głupio, myślałem, że to było aC# pytanie ... –

3

parseInt metoda akceptuje tylko część numeru, nie każdy rodzaj wskaźnika "podstawowego", takiego jak "0x" dla heksadecymalnego lub "0" dla ósemkowego. Użyj tego w ten sposób:

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

Integer.valueOf (ciąg) przyjmuje reprezentację dziesiętną. Musisz określić, że liczba jest w formacie szesnastkowym, np.

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

Zauważ, że Integer.valueOf (ciąg, 16); nie przyjmuje prefiksu 0x.Jeśli twój ciąg zawiera prefiks 0x, możesz użyć Integer.decode ("0x00ff0000");

+9

W jaki sposób 'Integer.decode' nie jest właściwą odpowiedzią? – ubiquibacon

+0

Hej, działa to tylko dla 00ff0000, a nie dla 80ff0000. Mam ciąg znaków takich jak String hex = "803BB9FF"; i chcę to ukryć w int color = 0x803BB9FF please help –

+0

@AshishSahu Nie można pomóc, gdy nie opisujesz, co się dzieje i czego się spodziewasz. 0x803BB9FF to -2143569409 (ponieważ int w Javie jest podpisane). Co więc "nie działa" na temat -2143569409? – nos