十六进制转化为十进制的问题

hanger_liu 2016-08-04 11:34:18
现在遇到这样一个问题,没搞懂。定义了一个十六进制的数,然后转换为String类型,进行截取,但是截取的时候出现错误。

int a=0x0001;
String b=Integer.toString(a);
String c =b.subString(0,1);
int d =Integer.parseInt(c);

此时输出是正确的,为1;

然后我把a改为0x000A,
就爆出错误,接着我把c改为b.subString(0,2)正确,

是A是占2个字节,还是其它什么原因呢?

求大神给我详细解释一下这个位数问题,然后告诉我一下,那么我截取0x0000 前面这几位,0代表0-F,改怎么办呢?


...全文
138 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hanger_liu 2016-08-04
  • 打赏
  • 举报
回复
引用 4 楼 hhv_01 的回复:
[quote=引用 3 楼 hanger_liu 的回复:] 那意思就是此时,我去截取时的时候十六进制已经转化成十进制了?或者r说toString 后,此时的int 就变成了十进制,所以截取结果是这样,对吗? 所以需要调用的是toHexString?
其实不是转化,编译器检测到了只是int类型变量的不同写法,执行
int a=0x0000A;
这句就是把a的值赋成了10, 根据楼主的代码,把
String b=Integer.toString(a);
这句改成
String b=Integer.toHexString(a);
那么c的值将是"a",当然
int d =Integer.parseInt(c);
这句会抛出java.lang.NumberFormatException,因为"a"并不是一个数字。[/quote] 恩恩,完全懂了。谢谢
HerveyHall 2016-08-04
  • 打赏
  • 举报
回复
引用 3 楼 hanger_liu 的回复:
那意思就是此时,我去截取时的时候十六进制已经转化成十进制了?或者r说toString 后,此时的int 就变成了十进制,所以截取结果是这样,对吗? 所以需要调用的是toHexString?
其实不是转化,编译器检测到了只是int类型变量的不同写法,执行
int a=0x0000A;
这句就是把a的值赋成了10, 根据楼主的代码,把
String b=Integer.toString(a);
这句改成
String b=Integer.toHexString(a);
那么c的值将是"a",当然
int d =Integer.parseInt(c);
这句会抛出java.lang.NumberFormatException,因为"a"并不是一个数字。
hanger_liu 2016-08-04
  • 打赏
  • 举报
回复
引用 2 楼 hhv_01 的回复:
[quote=引用 1 楼 hhv_01 的回复:]
int a=0x0001;
int a=1;
是等效的,
int a=0x000A;
和 int a=16 是等效的,只是整数的十六进制和十进制的不同写法而已,所以b.substring(0,1)后截取的是"16"的第一位,也就是"1",并不会报错。(ps: java标准库中String有substring方法,没有subString方法,注意大小写) 如果想使用十六进制写法的字符串,需要调用Integer.toHexString(int i)方法
啊,错了错了,A是10[/quote] 那意思就是此时,我去截取时的时候十六进制已经转化成十进制了?或者r说toString 后,此时的int 就变成了十进制,所以截取结果是这样,对吗? 所以需要调用的是toHexString?
HerveyHall 2016-08-04
  • 打赏
  • 举报
回复
引用 1 楼 hhv_01 的回复:
int a=0x0001;
int a=1;
是等效的,
int a=0x000A;
和 int a=16 是等效的,只是整数的十六进制和十进制的不同写法而已,所以b.substring(0,1)后截取的是"16"的第一位,也就是"1",并不会报错。(ps: java标准库中String有substring方法,没有subString方法,注意大小写) 如果想使用十六进制写法的字符串,需要调用Integer.toHexString(int i)方法
啊,错了错了,A是10
HerveyHall 2016-08-04
  • 打赏
  • 举报
回复
int a=0x0001;
int a=1;
是等效的,
int a=0x000A;
int a=16;
是等效的,只是整数的十六进制和十进制的不同写法而已,所以b.substring(0,1)后截取的是"16"的第一位,也就是"1",并不会报错。(ps: java标准库中String有substring方法,没有subString方法,注意大小写) 如果想使用十六进制写法的字符串,需要调用Integer.toHexString(int i)方法

50,528

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧