黑马程序员技术交流社区

标题: char型数据的运算和转换 [打印本页]

作者: 焦晨光    时间: 2012-7-18 08:58
标题: char型数据的运算和转换
本帖最后由 焦晨光 于 2012-7-18 11:53 编辑

今天看到一个解决10进制转换16进制的程序
从键盘输入一个10进制数,然后根据10进制转16进制的规则 整除取余
假设从键盘输入10进制1234 将其转换成 16进制
int p=1234%16
将p的值传入下面的方法
public static char toHexChar(int hexValue){
    if(hexValue<=9 && hexValue>=0)
        return (char) (hexValue+'0');
    else
        return (char) (hexValue-10+'A');
}
方法体里面的语句是如何将1-15变成16进制的表达形式的?
书上只给出了运行结果
然后我查阅了char数据与数值型数据之间的转换知识点
但是讲的不是很清楚 我初学 看不太懂
希望大家能帮我详细解释一下 char型数据的运算和转换这方面的知识点
谢谢大家!


作者: 田建    时间: 2012-7-18 09:42
本帖最后由 田建 于 2012-7-18 09:46 编辑

这个涉及到ASCII码表,在ASCII码表里,‘0’是64,‘A’是65,后面的依此类推,所以当hexValue<=9 && hexValue>=0时,可以通过(char) (hexValue+'0');来转,而因为16进制中9以上是用A、B、C、D、E、F表示,所以说要将其转成响应字符,即(char) (hexValue-10+'A');

(char) (hexValue-10+'A');-->比如说hexValue是15,减去10是5,加上'A'对应的ASCII码,就是70,而70在ASCII码表里对应的就是‘F’,因而就完成了转换!
作者: 梁小波    时间: 2012-7-18 09:44
你问的是toHexChar这个方法吗?
它的作用其实是把1-15变成16进制的表达形式,正如你说的;
下面是一个判断;如果hexvalue在1-9之间,那么不变即hexValue+'0'!由于hexvalue是int型的数字,
所以加上‘0’;它的ascii码的值会变成相应的字符型的。那么用char强转后就是相应的char型了;
而hexvalue在10-15之间的话变成的是a-f的字符;所以要加'a';

最关键要理解字符在计算机中的表示;
其实char是数字组成的,即ascii码;计算机会判断该数字是表示数字还是字符?
如果是数字,不变。如果是字符,转化相应的ascii码表中对应的字符。
所以利用偏移的量hexvalue+字符。再强转会得到你想要的字符;(针对上题说的)
作者: 康大玮    时间: 2012-7-18 09:51
本帖最后由 康大玮 于 2012-7-18 10:00 编辑

16进制:0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F;
这要涉及到编码表ASCII编码表

A在编码表中是‘65’,B---66,C---67,D---68,E---69,F---70;

当数字大于等于10小于等于15的时候电脑里面是用A,B,C,D,E,F代替
所以就有  (char) (hexValue-10+'A');

作者: 康大玮    时间: 2012-7-18 09:57
毕老师的视频里也有
/*
        十进制-->十六进制。
        */
        public static void toHex(int num)
        {

                StringBuffer sb = new StringBuffer();

                for(int x=0; x<8; x++)
                {
                        int temp = num & 15;
                        if(temp>9)
                                //System.out.println((char)(temp-10+'A'));
                                sb.append((char)(temp-10+'A'));
                        else
                                //System.out.println(temp);
                                sb.append(temp);

                        num  = num >>> 4;
                }
                System.out.println(sb.reverse());

        }


查表法
class ArrayTest7
{
        public static void main(String[] args)
        {
       
        }

        /*
        十进制-->二进制
        */
        public static void toBin(int num)
        {
                trans(num,1,1);
        }

        /*
        十进制-->八进制
        */
        public static void toBa(int num)
        {
                trans(num,7,3);
        }
        /*
        十进制-->十六进制
        */
        public static void toHex(int num)
        {
                trans(num,15,4);
        }

        public static void trans(int num,int base,int offset)
        {

                if(num==0)
                {
                        System.out.println(0);
                        return ;
                }
                char[] chs = {'0','1','2','3'
                                        ,'4','5','6','7'
                                        ,'8','9','A','B'
                                        ,'C','D','E','F'};
                char[] arr = new char[32];

                int pos = arr.length;

                while(num!=0)
                {
                        int temp = num & base;
                        arr[--pos] = chs[temp];
                        num = num >>> offset;
                }

                for(int x=pos; x<arr.length; x++)
                {
                        System.out.print(arr[x]);
                }

                return ;
        }
}







作者: 黑马-王言龙    时间: 2012-7-18 10:18
  1. public static char toHexChar(int hexValue){
  2.     if(hexValue<=9 && hexValue>=0)        //如果算得的结果是0-9的数,则将其转成字符打印
  3.         return (char) (hexValue+'0');
  4.     else
  5.         return (char) (hexValue-10+'A');        //否则打印用字母表示的数值,即打印用ABCDE表示的10、11、12、13、14、15
  6. }
复制代码

作者: 陈冲    时间: 2012-7-18 10:51
  1. public static char toHexChar(int hexValue){
  2.     if(hexValue<=9 && hexValue>=0)
  3.         return (char) (hexValue+'0');
  4.     else
  5.         return (char) (hexValue-10+'A');
  6. }
复制代码
A,B,C,D,E,F在ASCII码中对应的编码是65,66,67,68,69,70
(char) (hexValue-10+'A')语句中,如果hexValue=15,则hexValue-10+'A'就把字符A转化为ASCII编码 65,相当于 15-10+65=70,再将70强制转化为字符型,也就是F;
A,B,C,D,E的计算方法同上
作者: 杨康    时间: 2012-7-18 11:10
对于16进制,为了表示方便,对于1-9,与10进制的数表示形式一样。
对于10-15,分别用'A','B','C','D','E','F'来表示。
而'A'在ASCII中对应的数字是65,依此类推。
进制转换的思想就是不断的%16,除以16的过程。
不断的取余过程,判断余数的范围,如果大于9就要转换成对应的字符表现形式。
作者: 刘霄翔    时间: 2012-7-18 11:56
这里面涉及到了ASCII码表的知识
public static char toHexChar(int hexValue)
{
    if(hexValue<=9 && hexValue>=0)
        return (char) (hexValue+'0');//
    else
        return (char) (hexValue-10+'A');//
}
16进制中,对于大于等于10,小于等于15的数用A,B,C,D,E,F代替;
在ASCII码表中,A--65,B--66,C---67,D---68,E---69,F---70;
char型数值都有自己对应的ASCII码值,(hexValue-10+'A')的计算方法是先将字符'A'转成对应的ASCII码值后,再与hexValue-10运算,得到的数值也是ASCII码值,再用char将ASCII码值强制转换成字符。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2