java parselong_java – 为什么我不应该从Long.parseUnsignedLong获取一个值

当我做

Long.parseUnsignedLong("FBD626CC4961A4FC", 16)

我回来了-300009666327239428

要从此HEX值中获取正确的数字,我会这样做

BigInteger value = new BigInteger("FBD626CC4961A4FC", 16);

当我打印值时,它会打印正确的值.但如果我做value.longValue()

再次我得到相同的-300009666327239428这个数字太大而且溢出?

解决方法:

Java 8(有些)支持unsigned longs,但是,你不能直接打印它们.这样做会给你看到的结果.

如果你有一个无符号长

Long number = Long.parseUnsignedLong("FBD626CC4961A4FC", 16);

你可以使用该函数获得正确的字符串表示

String numberToPrint = Long.toUnsignedString(number);

如果你现在打印numberToPrint你得到

18146734407382312188

更确切地说,您的号码仍然是常规的签名长,这就是为什么如果直接打印它会显示溢出的原因.但是,有一些新的静态函数会将值视为无符号,例如Long.toUnsignedString(long x)或Long.compareUnsigned(long x,long y).

标签:java,long-integer,primitive-types

来源: https://codeday.me/bug/20190722/1502103.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值