一尘不染

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

java

我正在尝试将十六进制代码长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

我也尝试一次将两个字符做一次,然后将结果相乘,转换有效,但数字不正确。

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.

不能这么说,我不能使用第三方库,因此必须在Java标准库中完成。

提前谢谢你的帮助。


阅读 313

收藏
2020-09-08

共1个答案

一尘不染

对于int而言,它太大了(它是4个字节并有符号)。

Long.parseLong("AA0F245C", 16);
2020-09-08