繁体   English   中英

将十六进制字符串解析为int值时发生意外的NumberFormatException

Unexpected NumberFormatException while parsing a hex string to an int value

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我想解析一个包含8个十六进制数字(4字节)的字符串,但是我遇到了NumberFormatException。 怎么了

assertThat(Integer.parseInt("FFFF4C6A",16),is(0xFFFF4C6A));
5 个回复

您的数字代表的数字大于可分配给int的数字。 尝试:

Long.parseLong("FFFF4C6A", 16);

得到4294921322。

文档

如果发生以下任一情况,将引发NumberFormatException类型的异常:

  • 第一个参数为null或长度为零的字符串。
  • 基数小于Character.MIN_RADIX或大于Character.MAX_RADIX
  • 字符串的任何字符都不是指定基数的数字,…
  • 字符串表示的值不是int类型的值。

这是您遇到的第四个案例。

这是因为提供的Integer.parseInt("FFFF4C6A",16)超出了Integer.MAX_VALUE ,后者被定义为public static final int MAX_VALUE = 0x7fffffff;

现在,根据parseInt(...)的Javadoc ,在以下两种情况下,您都将遇到NumberFormatException

如果发生以下任一情况,将引发NumberFormatException类型的异常:

  • 第一个参数为null或长度为零的字符串。
  • 基数小于Character.MIN_RADIX或大于Character.MAX_RADIX。
  • 字符串的任何字符都不是指定基数的数字,除非第一个字符可以是减号'-'('\\ u002D')或加号'+'('\\ u002B')(前提是该字符串是长于长度1。
  • 字符串表示的值不是int类型的值。

在您的情况下,由于提供的String值超过Integer.MAX_VALUE,因此您满足NumberFormatException的第4个子句

可能的解决方案:为了对此进行解析,请使用Long.parseLong(...) ,其中MAX_VALUE定义为`public static final long MAX_VALUE = 0x7fffffffffffffffL

您已超出整数范围。

Integer.MAX_VALUE = 2147483647
0xFFFF4C6A = 4294921322

将其解析为Long作品:

Long.parseLong("FFFF4C6A",16)

如果仅要将十六进制字符串表示为整数(因为它是32位),则需要使用BigInteger

new BigInteger("FFFF4C6A", 16).intValue()

我不知道assertThat()方法,但是您的十六进制数字“ FFFF4C6A”对于一个整数来说太大了。

例如,如果您编写:

int号= Integer.parseInt(“ FFFF4C6A”,16)

您将得到相同的错误。 编写代码的正确方法是:

双精度数= Integer.parseInt(“ FFFF4C6A”,16)

1 解析int时出现NumberFormatException

所以我正在创建文件读取器/写入器,可以访问给定的文件并保存/读取它。我在从文件读取时遇到问题。 内容是整数,字符串和双由“|”分隔 分隔符。 我正在使用StringTokenizer来分隔令牌并将它们保存到每个单独的变量中,但是当我读取整数时,我得到一个NumberFormatExcept ...

2 NumberFormatException - 带有十六进制值的字符串

我得到了一个字节流,这个流是一个字节数组( byte[] 流),现在我想先将这个字节解析为一个十六进制值,例如 80 = "0x50" 然后将其转换为 int 但是对于像 0xB8 这样的一些值,我得到了一个 `java.lang.NumberFormatException: For input ...

4 解析浮点数时String的NumberFormatException

此错误可能是由于我的系统区域设置不同引起的。 我使用DOT作为小数点分隔符。 我尝试在应用程序启动时设置默认语言环境,但遇到相同的异常。 堆栈跟踪: ...

2016-08-24 06:13:44 2 571   java
5 解析包含Long值的JSON字符串时出现NumberFormatException

我有一个日志文件,每个句子都包含一个JSON对象,如下所示:- 我正在使用JSON解析器读取每一行并将其存储在String中以进行进一步处理 当使用“ json-simple-1.1.1.jar”解析上述String时,出现错误:- 解析以上JSON字符串的代码:- ...

2018-05-26 14:11:47 1 406   java/ json
6 Java SAX解析器-解析int时出现NumberFormatException

我尝试通过SAX Parser解析XML,如下所示: 下面显示了一个SAX解析器: 我得到这个错误: 在该字段中的某处没有换行符号,但仍指向它。 它成功输出了第一个名称(矩阵),但随后因该错误而卡住。 但是,DOM解析器可以很好地解析XML。 如何解决? ...

7 将String解析为Int时引发NumberFormatException

我试图从流中读取字节并将其附加到stringbuilder后,将字符串解析为int值。 但是,当我尝试将字符串解析为Int值时,将引发NumberFormatException。 在语句周围加上“ try and catch”也无济于事,因为它会解析“”(猜测为空)。 以下是我的代码详 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM