如何将超长字符串转为整数?解决代码中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
相关产品推荐
相关产品推荐

