博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java 十进制和十六制之间的转化(负数的处理)
阅读量:4970 次
发布时间:2019-06-12

本文共 1046 字,大约阅读时间需要 3 分钟。

在一些情况下,我们需要将数字在十进制和十六制下互相转化。

在Java中将十进制转化成十六进制非常的简单。

 
int var = 324;
String hex = Integer.toHexString(var);
 
long lvar = 3243143432134L;
String lhex = Long.toHexString(lvar);
 
这样就可以得16进制的字符串了。当要从十六进制转化成十进制的时候也很方便:
 
Integer.parseInt(hex, 16);
Long.parseLong(hex, 16);
 
当int和long变量的值都是正数的时候,这样做一点问题都没问题,但当int和long变量的值为负数的时候,问题就出现了:
 
int var = -23243;
String hex = Integer.toHexString(var);
Integer.parseInt(hex, 16);
这时会报出Exception:

Exception in thread "main" java.lang.NumberFormatException: For input string: "ffffa535"

    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
    at java.lang.Integer.parseInt(Integer.java:459)
    at demo.Main.main(Main.java:10)

 

这是为什么呢? 问题就在于Integer.parseInteger的时候,会将传入十六进制数字一致认为成正数,所以这时候表示负数的十六进制字符串所表示的数字就超出了Integer所能表示的数字范围,所以会报出NumberFormatException, 同时的问题也会现在Long.parseLong身上。

那么如何才解决这个问题呢?这时候的解决方案就是BigInteger.

BigInteger bi = new BigInteger(hex, 16);

通过BigInteger.intValue();和 BigInteger.longValue(); 得到你所需要的int或long型值。

转载于:https://www.cnblogs.com/literoad/archive/2013/01/25/2875908.html

你可能感兴趣的文章
WKWebView强大的新特性
查看>>
_DataStructure_C_Impl:图的遍历
查看>>
Linux环境变量PS1配置
查看>>
broadleaf commerce到mysql和tomcat的迁移
查看>>
【浅墨Unity3D Shader编程】之三 光之城堡篇:子着色器、通道与标签的写法 & 纹理混合...
查看>>
IDEA生成增强for循环
查看>>
图表插件echars的使用案例
查看>>
model相关
查看>>
Echarts 图例交互事件
查看>>
常用PS快捷键
查看>>
js获取iframe里面的元素
查看>>
简单的Map缓存机制实现
查看>>
2017 CCPC秦皇岛 H题 Prime set
查看>>
tips04-省市区的三级联动
查看>>
搭建 Keras
查看>>
【bzoj1787】[Ahoi2008]Meet 紧急集合 倍增LCA
查看>>
【bzoj3544】[ONTAK2010]Creative Accounting 前缀和+STL-set
查看>>
大型网站架构系列:负载均衡详解(1)
查看>>
初探remoting双向通信(一)
查看>>
【目录】mysql 进阶篇系列
查看>>