我正在尝试将一个包含8个字符的十六进制代码字符串转换为整数,以便可以使用整数比较而不是在许多不同值上进行字符串比较。
我知道这在C++中相当简单,但我需要在Java中完成。我需要满足的测试用例基本上是将“AA0F245C”转换为整数,然后再转回该字符串,以便我知道它是否正确转换。
我尝试了以下方法:
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标准库完成。
非常感谢您的帮助。
0xAA0F245C = 2853119068
,但Integer.MAX_VALUE = 0x7fffffff = 2147483647
。 - PshemoInteger.parseUnsignedInt("value",radix)
方法来满足你的需求。如果值大于Integer.MAX_VALUE
,则它将被映射为负数。 - John