java – 为什么我不应该从Long.parseUnsignedLong获取一个值
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 为什么我不应该从Long.parseUnsignedLong获取一个值,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含902字,纯文字阅读大概需要2分钟。
内容图文
当我做
Long.parseUnsignedLong("FBD626CC4961A4FC", 16)
我回来了-300009666327239428
这似乎是错的,因为根据这个答案https://stackoverflow.com/a/2550367/1754020,unsigned long的意思是范围总是正的.
要从此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.parseUnsignedLong获取一个值全部内容,希望文章能够帮你解决java – 为什么我不应该从Long.parseUnsignedLong获取一个值所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。