2012-07-07 77 views
30

所以,在Java中,你知道你可以聲明整數這樣的:將十六進制字符串解析爲整數會引發NumberFormatException?

int hex = 0x00ff00; 

我認爲你應該能夠扭轉這一進程。我有這樣的代碼:

Integer.valueOf(primary.getFullHex()); 

其中primary是自定義Color類的對象。它的構造函數需要一個Integer來指定不透明度(0-99)和一個十六進制字符串(例如00ff00)。

這是getFullHex方法:

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

當我把這種方法它給了我這個NumberFormatException

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

我不明白這是怎麼回事。有人可以解釋嗎?

回答

75

這會有幫助嗎?

Integer.parseInt("00ff00", 16) 

16意味着你應該字符串解釋爲基於16(十六進制)。通過使用2可以解析二進制數,8代表八進制數。 10是默認值並解析十進制數字。

在你的情況下,Integer.parseInt(primary.getFullHex(), 16)將不會工作,因爲0x前綴前置getFullHex() - 擺脫,你會沒事的。

+1

謝謝!我不知道'Integer.parseInt(..)'可能需要另一個參數!感謝您爲我清理! – mattbdean 2012-07-07 22:57:52

+0

呵呵,我也是這個的受害者 – JohnMerlino 2014-07-24 21:09:10

+0

無法正常工作java.lang.NumberFormatException:Invalid int:「0x920B540C」,color2 = Integer.parseInt(color_2,16); (with argbA) – delive 2015-08-05 15:08:56

1

這應做到:

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

如果要生成一個整數的十六進制表示,使用

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

'toHexString()'?那是什麼? – 2013-03-03 19:48:10

+0

@JeremyHolovacs檢查了這個http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Integer.html#toHexString(int) – GETah 2013-03-03 20:54:32

+0

Duh ...現在感覺很愚蠢,我認爲這個是ac#的問題... – 2013-03-03 21:55:36

3

parseInt函數方法只接受數字部分,沒有任何一種基本「指示符,例如」0x「爲十六進制或」0「爲八進制。像這樣使用

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

Integer.valueOf(string)假定爲十進制表示。你必須指定數字是十六進制格式,例如

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

請注意,Integer.valueOf(字符串,16);不接受0x的前綴。如果您的字符串包含前綴0x,則可以使用Integer.decode(「0x00ff0000」);

+9

'Integer.decode'是不是正確的答案? – ubiquibacon 2014-01-09 15:49:16

+0

嘿,這隻適用於00ff0000不適用於80ff0000。我有字符串像字符串十六進制=「803BB9FF」;我想要轉換成int color = 0x803BB9FF請幫忙 – 2014-05-24 01:48:24

+0

@AshishSahu當你沒有描述會發生什麼,以及你期望發生什麼時,幫助是不可能的。 0x803BB9FF是-2143569409(因爲Java中的int被簽名)。那麼什麼是「不工作」約-2143569409? – nos 2014-05-24 01:52:23

相關問題