将十六进制字符串转换为整型字符串

2022-08-31 08:35:23

我正在尝试将一个长度为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标准库中完成。

提前感谢您的帮助。


答案 1

对于int(4个字节并签名)来说,它实在是太大了。

Long.parseLong("AA0F245C", 16);

答案 2

你可以这样使用

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