A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 曹宇 于 2013-3-28 23:09 编辑

如同   9   A   C 这样的3个数
通过怎样的代码能变成   9AC这样的一个十六进制的数。。。。。

谢谢了。想了半天,发现16进制不适用 十进制那样的乘以10的算法来合成,我想了想乘以16不知道可行,还是看看学长的代码参考一下。谢谢了!

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

14 个回复

倒序浏览
直接转换成字符串,然后相加呀!代码像这样应该是可以的:
  1. String[] arr = {"9","A","C"};//把要相加的数存到数组中
  2. String str = "";                    //定义一个变量用来接收得到的字符串
  3. for(int i=0;i<arr.length;i++){
  4.       str+=arr[i];                  //循环之后str就是你要的值了
  5. }

复制代码
不知道你说的是否是这样???

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
不是啊,那是相加了。。。。9+A+C了。。。

我的意思是说 把9  A  C  变成 9AC这个十六进制数。

就像10进制的。。5 6 9 2 这样的 变成5692这个数  而不是 5+6+9+2  

不过还是谢谢你的回答了!!
回复 使用道具 举报
想法:先把char的9,A,C通过if之类的判定算法,转化成int的十进制的9,10,12用变量abc一存。再(a*16^2)+(b*16)+c*1计算出10进制的这个数的表示,再通过Ingeger.toHexString()方法应该就可转换成16进制…………………………………………………………………………………………

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1 新人加油

查看全部评分

回复 使用道具 举报
Integer.toHexString() 打错了。
回复 使用道具 举报
  1. public static void main(String[] args) {
  2.                 int[] arr={9,0xA,0xC};
  3.                 int num=0;
  4.                 for(int x=0;x<arr.length;x++)//把数组里的各个16进制的数字变为二进制然后向左偏移4位相加 ,一直加到最后一位,变为十进制
  5.                 {
  6.                         int temp;
  7.                         if(x!=arr.length-1)
  8.                         {
  9.                                 temp=arr[x]&15;
  10.                                 num+=temp;
  11.                                 num=num<<4;
  12.                         }
  13.                         else
  14.                         {
  15.                                 temp=arr[x]&15;
  16.                                 num+=temp;
  17.                         }
  18.                 }
  19.                 System.out.println(Integer.toHexString(num));直接将十进制转换成十六进制, 也可以调用下面自定义的十进制转换十六进制方法
  20.         }
复制代码
  1. public static void trans(int num)
  2.         {
  3.                 if(num==0)
  4.                 {
  5.                         System.out.println(0);
  6.                         return;
  7.                 }
  8.                 //建立一个表 包含了0——F 16个字符
  9.                 char[] chs={'0','1','2','3',
  10.                         '4','5','6','7','8','9',
  11.                         'A','B','C','D','E','F',};
  12.                 //建立一个数组来接收转化后的字符
  13.                 char[] arr=new char[32];
  14.                 //建立一个指针
  15.                 int pos=arr.length;
  16.                 while(num!=0)
  17.                 {
  18.                         int temp=num&15;
  19.                         arr[--pos]=chs[temp];
  20.                         num=num>>>4;
  21.                 }
  22.                 for(int x=pos;x<arr.length;x++)
  23.                 {
  24.                         System.out.print(arr[x]);
  25.                 }               
  26.         }
复制代码

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
刘凯 金牌黑马 2013-3-25 23:10:39
7#
HM朱俊 发表于 2013-3-25 22:47

楼上第一个方法不用&15吧    &了貌似就不对了  比如0xAB  &了15就剩0xB了
回复 使用道具 举报
我是按照你说的 将一位上的数字单独拆开装进数组里来算的 比如之前的9 A C ,是每一位上的数字单独去&15变成二进制的
如果你要放0xAB进去就是两位数了 ,那就需要用for循环一位一位的取出来 可以根据第二个方法那样 先& 得到B 再右移4位 再&一次 得到A
回复 使用道具 举报
曹宇 中级黑马 2013-3-26 01:16:01
9#
感谢楼上的学长,代码有点多,容我慢慢整理。。。。。。。

对于Keith   学长的想法:先把char的9,A,C通过if之类的判定算法,转化成int的十进制的9,10,12用变量abc一存。再(a*16^2)+(b*16)+c*1计算出10进制的这个数的表示,再通过Ingeger.toHexString()方法应该就可转换成16进制…………………………………………………………………………………………

谢谢你的解答,怪我没有把问题说清,系统提供的函数我知道有这个。我是想要这个东西的实现原理。。。  

呵呵 有点怪癖,什么都西都喜欢去刨根问底,搞清楚是怎么一回事。。。。


谢谢学长们的解答,学到很多!!
回复 使用道具 举报
  1. public static void main(String[] args) {
  2.                 int x = 0x9;
  3.                 int y = 0xA;
  4.                 int z = 0xC;
  5.                 String num = Integer.toHexString(x)+Integer.toHexString(y)+Integer.toHexString(z);
  6.                 int result = Integer.parseInt(num,16);
  7.                 System.out.println(Integer.toHexString(result));
  8.         }
复制代码

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
我觉得一楼的做法就能满足你的要求了,你直接用字符串相加就行了。你不把9AC看成十六进制数,而是看成普通的String类,那就是String str1=“9”,String str2=“A”,String str3 ="C",直接使用字符串相加就完事了。
回复 使用道具 举报
姜伟 发表于 2013-3-26 16:13
我觉得一楼的做法就能满足你的要求了,你直接用字符串相加就行了。你不把9AC看成十六进制数,而是看成普通 ...

恩,那个我知道。。我想的是 就是合成一个可以真正使用的十六进制数,而不是在打印输出上显示出来个样子。。。。

就是想看看其中的实现代码是怎么写的,给脑子里面长点算法知识 呵呵!

回复 使用道具 举报
若还有问题,请继续追问; 没有的话,将帖子分类改成【已解决】哦~
回复 使用道具 举报
曹宇 发表于 2013-3-28 20:42
恩,那个我知道。。我想的是 就是合成一个可以真正使用的十六进制数,而不是在打印输出上显示出来个样子 ...

如果想把这个字符串变成一个可以使用的十六进制数,可以通过Integer.parseInt("9AC",16)来将字符串"9AC"变成十六进制娄9AC
回复 使用道具 举报
姜伟 发表于 2013-3-28 22:58
如果想把这个字符串变成一个可以使用的十六进制数,可以通过Integer.parseInt("9AC",16)来将字符串"9AC" ...

恩,谢谢了,这个方法我记住下。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马