将十六进制字符串转换为int

Rol*_*loc 104 java hex

我试图将一个长度为8个字符的十六进制代码的字符串转换为整数,以便我可以在很多不同的值上进行int比较而不是字符串比较.

我知道这在C++中相当简单,但我需要在Java中完成.我需要满足的测试用例基本上是将"AA0F245C"转换为int然后再返回到该字符串,以便我知道它正在转换.

我尝试过以下方法:

int decode = Integer.decode("0xAA0F245C");  // NumberFormatException
int decode2 = Integer.decode("AA0F245C"); //NumberFormatException
int parseInt = Integer.parseInt("AA0F245C", 16); //NumberFormatException
int valueOf = Integer.valueOf("AA0F245C", 16); //NumberFormatException
Run Code Online (Sandbox Code Playgroud)

我也尝试过一次两个字符并将结果相乘,转换有效,但数字不正确.

int id = 0;
for (int h = 0; h < hex.length(); h= h+2)
{
    String sub = hex.subSequence(h, h+2).toString();

if (id == 0)
    id = Integer.valueOf(sub, 16);
else
    id *= Integer.valueOf(sub, 16);             
 }
//ID = 8445600 which = 80DEA0 if I convert it back. 
Run Code Online (Sandbox Code Playgroud)

我不能只使用第三方库,所以这必须在Java标准库中完成.

提前谢谢你的帮助.

Den*_*ret 143

它对于int来说太大了(这是4个字节并且已签名).

使用

Long.parseLong("AA0F245C", 16);
Run Code Online (Sandbox Code Playgroud)

  • 太棒了,谢谢你!我可能应该知道这一点.但它让我感觉更好,在发布之前我问过的4个人都不知道它:).作为旁注,我现在必须弄清楚为什么这个人编写了我需要比较整数的代码,将它们作为整数而不是长...这可能意味着其他东西已经关闭.除此之外......谢谢你的快速回答!!!! 还要诅咒你的java,因为你的可怕错误消息......"它很大"会有所帮助. (4认同)

man*_*tam 29

你可以这样使用

System.out.println(Integer.decode("0x4d2"))    // output 1234
//and vice versa 
System.out.println(Integer.toHexString(1234); //  output is 4d2);
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢这个答案,不知道在 Integer 类中有一个通用的、类型不敏感的方法。谢谢你的知识。 (2认同)

小智 17

Java Integer可以处理的最大值是2147483657,即2 ^ 31-1.十六进制数AA0F245C是一个十进制数字2853119068,并且太大了,所以你需要使用

Long.parseLong("AA0F245C", 16);
Run Code Online (Sandbox Code Playgroud)

使它工作.


hea*_*eat 7

你可以使用parseInt和format参数轻松完成.

Integer.parseInt("-FF", 16) ; // returns -255
Run Code Online (Sandbox Code Playgroud)

javadoc整数

  • 您是否尝试过我发布的完整字符串? (5认同)

Han*_*ney 6

这是正确的答案:

myPassedColor = "#ffff8c85" int colorInt = Color.parseColor(myPassedColor)