为什么这个 Java parseInt 十六进制字符串会导致 NumberFormatException?

发布于 2025-01-03 08:40:08 字数 398 浏览 1 评论 0原文

Integer.parseInt("ff8ca87c", 16);

由于某种原因,这给了我一个 NumberFormatException 。你知道这是为什么吗?

Exception in thread "main" java.lang.NumberFormatException: For input string: "ff8ca87c"
    at java.lang.NumberFormatException.forInputString(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.valueOf(Unknown Source)
Integer.parseInt("ff8ca87c", 16);

This gives me a NumberFormatException for some reason. Do you know why that is?

Exception in thread "main" java.lang.NumberFormatException: For input string: "ff8ca87c"
    at java.lang.NumberFormatException.forInputString(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.valueOf(Unknown Source)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

在你怀里撒娇 2025-01-10 08:40:08

它失败的原因是您试图将 +0xff8ca87c 放入有符号整数中。 32 位有符号整数的最大值为 +0x7ffffffff,因为最高有效位用于存储符号。

尝试使用 long 代替。 64 位有符号 int 的最大值为 0x7fffffffffffffff,在这种情况下这足以满足您的需求。

或者,在 Java 8 中,您可以使用 Integer.parseUnsignedInt("ff8ca87c", 16); ,它将将该值视为无符号整数。

The reason it fails is that you're trying to put +0xff8ca87c into a signed integer. The maximum value of a 32-bit signed integer is +0x7fffffff, because the most significant bit is used to store the sign.

Try using a long instead. The maximum value of a 64-bit signed int is 0x7fffffffffffffff, which is more than adequate for your needs in this case.

Or, in Java 8 you can use Integer.parseUnsignedInt("ff8ca87c", 16); which will treat the value as an unsigned integer.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文