当我做
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