You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将超长字符串转为整数?解决代码中NumberFormatException报错问题

问题解答

1. 如何将超长字符串转换为整数?

这里的“超长”得看字符串表示的数值范围来处理:

  • 如果数值在long类型的范围内(比如十六进制字符串长度≤16位,十进制≤19位左右),直接用对应类型的解析方法就行,比如十进制用Long.parseLong(str),十六进制用Long.parseLong(str, 16)。
  • 如果数值超出了long的最大范围(9223372036854775807),那就得用java.math.BigInteger类——它支持任意大小的整数运算。比如十六进制转超大整数可以这么写:
    BigInteger bigInteger = new BigInteger(hexString, 16);
    
    之后可以通过bigInteger.toString()把它转成字符串,或者调用其他方法进行数值操作。

2. 修复代码中的NumberFormatException问题

先说说你这段代码报错的原因:原代码里先调用了Integer.parseInt(...),但Integer类型的取值范围是-2^31到2^31-1(十六进制对应80000000到7FFFFFFF),如果myBytes的长度超过4字节,生成的十六进制字符串就会超出Integer的范围,直接抛出NumberFormatException。而且你最终要转成long,完全没必要多一步转Integer的操作。

分两种情况给出修复方案:

  • 情况1:myBytes长度≤8字节(十六进制字符串≤16位)
    直接跳过Integer.parseInt,用Long.parseLong直接解析十六进制字符串:

    long l = Long.parseLong(DatatypeConverter.printHexBinary(myBytes), 16);
    textField.setText(String.valueOf(l));
    

    这样就能避开Integer的范围限制,直接转成long类型正常运行。

  • 情况2:myBytes长度超过8字节
    这时候long类型也存不下了,得用BigInteger来处理:

    BigInteger bigInt = new BigInteger(DatatypeConverter.printHexBinary(myBytes), 16);
    textField.setText(bigInt.toString());
    

    这样不管myBytes多长,都能正常解析成整数并显示。

内容的提问来源于stack exchange,提问作者Witold Strumiński

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:21:44