当前位置: 首页 > 知识库问答 >
问题:

Java无法将十六进制字符串解析为int

堵景天
2023-03-14

有人能告诉我为什么这段代码会引发异常吗?

int value = 0xabcdef01;
System.out.println(value);                 // prints -1412567295
String hex = Integer.toHexString(value);
System.out.println(hex);                   // prints abcdef01
// why does this line fail?
Integer.parseInt(hex, 16);  

此代码引发以下异常:

java.lang.NumberFormatException: For input string: "abcdef01"
  at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
  at java.lang.Integer.parseInt(Integer.java:583)

我使用以下JDK在Windows 7上运行

java version "1.8.0_51"
Java(TM) SE Runtime Environment (build 1.8.0_51-b16)
Java HotSpot(TM) 64-Bit Server VM (build 25.51-b03, mixed mode)

共有3个答案

龙志勇
2023-03-14

您对不返回自身的整数的混淆与toHexString()的特殊性有关,它返回“abcdef01”而不是“-543210ff”,后者真正代表您的原始整数。运行此操作以查看:

  int value = -0x543210ff;
  assert(value == 0xabcdef01);
  assert(value == Integer.parseInt("-543210ff", 16));
田玉韵
2023-03-14

也许你想要的是

 int num = (int) Long.parseLong(hex, 16);  

问题是数字

范承望
2023-03-14

在使用Java 8时,请考虑整数。parseUnsignedInt方法:

Integer.parseUnsignedInt(hex, 16);  
 类似资料:
  • 问题内容: 我要提取长十六进制字符串形式的数据,我需要将其转换为十进制表示法,截断18个小数位,然后在JSON中使用。 例如,我可能具有十六进制字符串: 最初我尝试使用,但是由于它支持的最高级别,我的数量最终太大了。 转换和截断后的示例为10 ^ 6。但是,在某些情况下,此数字最多可以为10 ^ 12(意味着截断为10 ^ 30!)。 攻击此问题的最佳策略是什么? 问题答案: 使用math / b

  • 问题内容: 我需要将二进制字符串转换为十六进制字符串,但是我有问题。我通过这种方法将二进制字符串转换为十六进制字符串: 没关系!但是我丢失了字符串左侧的零。例如: 该方法返回此:123456789ABCDEF,但我想返回此: 00000123456789ABCDEF 问题答案: 而不是我将使用解析值,然后以所需的宽度(在您的示例中为21)输出值:

  • 问题内容: 我也想将我的二进制(在字符串中)转换为十六进制字符串,这只是一个程序片段,因为该程序只是另一个更大程序的一部分: 问题是我不知道填充是否有效,但是我确定该程序返回了二进制字符串的错误十六进制转换,我正在尝试这样做: http://www.wikihow.com/Convert-Binary-to- Hexadecimal PS:我需要实现它(不使用任何内置函数) 问题答案: 如果您不必

  • 我有十六进制字符串,例如“0x103E”,我想将其转换为整数。意思是to我尝试了但它给出了数字格式异常。我如何实现这一点?

  • 问题内容: 我在ex中有整数。16,我正在尝试将此数字转换为十六进制数字。我试图通过使用十六进制函数来实现此目的,但是每当您向十六进制函数提供整数时,它都会返回十六进制数字的字符串表示形式, 有人可以告诉我如何将字符串格式的十六进制数字转换为简单的十六进制数字。 谢谢!! 问题答案:

  • 问题内容: 我想将十六进制字符串转换为二进制字符串。例如,十六进制2是0010。下面是代码: 但是,这仅适用于十六进制0-9;它不适用于十六进制A-F,因为它使用。谁能增强它? 问题答案: 您需要告诉Java int是十六进制的,如下所示: