黑马程序员技术交流社区

标题: 十进制转十六进制中的遇到的问题。。捉急啊 [打印本页]

作者: 冯心程    时间: 2012-2-9 21:12
标题: 十进制转十六进制中的遇到的问题。。捉急啊
本帖最后由 冯心程 于 2012-5-15 01:32 编辑

//十进制====>十六进制   (60为例)。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
        public static void ten2Hex(int num)
        {
                 StringBuffer sb=new StringBuffer();
                 for (int x=1;x<=8 ;x++ )
                {
                         int a =num&15;//算出num最低4位的二进制结构所代表的10进制数
                         if (a>9)
                    {
                         //System.out.print((char)(a-10+'A'));
                          sb.append((char)(a-10+'A'));
                    }else
                         //System.out.print(a);
                         sb.append(a);
                          num=num>>>4;                 
                 }                 
                 System.out.print(num+"用十六进制表示为:"+sb.reverse());
        }

这个算的60的十六进制num是60
结果是。。0用十六进制表示为:0000003C
最后调用不着真正的num啊  我要就想打印出      60用十六进制表示为:0000003C  有办法没啊??
憋半天没憋出来{:soso_e135:}
作者: maochong    时间: 2012-2-9 21:46
本帖最后由 maochong 于 2012-2-9 21:48 编辑

/*
* 关键思想:
* 1 除余取整法转换进制
* 2 十六进制中的A,B,C,D,E,F如何表示和生成
* 3 逆序添加余数对应的十六进制的字符串
*/
public class Demo {
        public  static void  main(String [] argc)
        {
               
                System.out.println(test(60));
                System.out.println(test(101));
                System.out.println(test(200));
        }
                //下面函数是十进制转换为十六进制函数
        public static  String  test(int num)
        {
                String str=new String();//用来保存结果
                String [] strValue=new String[128];//用来保存余数
                int i=0;
                while(num != 0)
                {
                        int n=num%16;//n是余数
                        if(n >= 0 && n <= 9)
                        {
                                strValue[i++]=String.valueOf(n);//把余数直接转换为对应字符串
                        }
                        else
                        {
                                //先把余数转换为对应的字符,再转换为字符串
                                strValue[i++]=String.valueOf((char)('A'+n-10));
                               
                        }       
                        num=num/16;
                }
                int len=i;//保存十六进制的位数
                for(i=len-1;i>=0;i--)
                {
                        str=str.concat(strValue);//倒序连接每一位数对应的字符串
                }
                return str;
               
        }

}

楼上测试下。我测试了没有错误。你领悟下关键思想吧。
作者: 魏腾飞    时间: 2012-2-9 23:33
你这个问题很简单。主要是你想调用的num并非想要的值,实际上num作为形式参数也就是一个局部变量,在ten2Hex()函数内有效。
但是因为函数内部对其进行了操作使其值发生了变化,有由原值经过移位逐渐成为了0.我的方法是:
public static void ten2Hex(int num)
        {
                System.out.print(num);//最初就进行num原值的输出。
                 StringBuffer sb=new StringBuffer();
                 for (int x=1;x<=8 ;x++ )
                {
                         int a =num&15;//算出num最低4位的二进制结构所代表的10进制数
                         if (a>9)
                    {
                         //System.out.print((char)(a-10+'A'));
                          sb.append((char)(a-10+'A'));
                    }else
                         //System.out.print(a);
                         sb.append(a);
                          num=num>>>4;                 
                 }                 
                 //System.out.print(num+"用十六进制表示为:"+sb.reverse());
                   System.out.print("用十六进制表示为:"+sb.reverse());//此处改为这样。否则num的值永远为0。

        }

作者: 秦碧    时间: 2012-2-10 00:09
在运算过程中改变了num的值
在函数的的第一行定义一个int num1=num;
最后打印num1+"用十六进制表示为:"+sb.reverse()就好
作者: 冯心程    时间: 2012-2-10 00:13
秦碧 发表于 2012-2-10 00:09
在运算过程中改变了num的值
在函数的的第一行定义一个int num1=num;
最后打印num1+"用十六进制表示为:"+sb ...

对 其实我就是这个意思 后面打印要引用的 谢谢 被这么简单的问题弄蒙了;P
作者: 冯心程    时间: 2012-2-10 00:15
魏腾飞 发表于 2012-2-9 23:33
你这个问题很简单。主要是你想调用的num并非想要的值,实际上num作为形式参数也就是一个局部变量,在ten2He ...

其实我不是这个意思  你这个办法很不错 也最简单 谢谢 嘿嘿
作者: 冯心程    时间: 2012-2-10 00:16
maochong 发表于 2012-2-9 21:46
/*
* 关键思想:
* 1 除余取整法转换进制

看起来很厉害的样子 容我消化一会   先看 一眼就能看懂的 嘿嘿




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