gpt4 book ai didi

Java从字符串中解析长

转载 作者:行者123 更新时间:2023-11-29 07:09:01 24 4
gpt4 key购买 nike

我目前正在尝试解析一些在 java 中存储为字符串的长值,我遇到的问题是:

String test = "fffff8000261e000"
long number = Long.parseLong(test, 16);

这会抛出一个 NumberFormatException:

java.lang.NumberFormatException: For input string: "fffff8000261e000"

但是,如果我敲掉字符串中的第一个“f”,它会很好地解析它。

我猜这是因为数字很大,我通常会做的是在 long 的末尾加上一个“L”来解决这个问题。但是,在从字符串解析 long 时,我无法找出最佳方法。

有人可以提供任何建议吗?

谢谢

最佳答案

有两种不同的方式来回答您的问题,具体取决于您真正寻找的行为类型。

答案 #1:正如其他人所指出的,您的字符串(解释为 正数 十六进制整数)对于 Java long 来说太大了。类型。所以如果你真的需要那么大的(正)整数,那么你需要使用不同的类型,也许是 java.math.BigInteger ,它还有一个构造函数采用 String和基数。

答案 #2:不过,我想知道您的字符串是否表示 long 的“原始”字节.在您的示例中,它将代表一个负数。如果是这样,那么 Java 的内置 long解析器不处理设置高位的值(即 16 位字符串的第一个数字大于 7)。

如果您遇到的是第 2 种情况,那么这里有一种(相当低效的)处理方式:

String test = "fffff8000261e000";
long number = new java.math.BigInteger(test, 16).longValue();

产生值 -8796053053440 . (如果您的字符串长度超过 16 位十六进制数字,它会默默地丢弃任何更高的位。)

如果效率是一个问题,您可以编写自己的位旋转例程,一次从字符串末尾取出两个十六进制数字,也许构建一个字节数组,然后转换为 long。一些类似的代码在这里:

How to convert a Java Long to byte[] for Cassandra?

关于Java从字符串中解析长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16216824/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com