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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 席杰 于 2014-8-10 15:39 编辑

public class ShiYan {
        public static void main(String[] args) {
                //将15转化为二进制。
                change(15,1,1);               
        }
        //定义十进制转化其他进制的函数。

        public static void change(int num,int base,int offset){
                //定义转换对码表。
                char[] codeTable={0,1,2,3,4,5,6,7,8,9,'A','B','C','D','E','F'};
                char[] result=new char[32];
                int pos=result.length;
                while(num!=0){
                        int temp=num&base;
                        result[--pos]=codeTable[temp];
                        num=num>>>offset;
                }
                //打印出得到的二进制。
                for(int x=0;x<result.length;x++){
                        System.out.print(result[x]);
                }
        }
}
这是毕老师教的方法,为什么用我的电脑打印输出来的不是二进制,而是这不认识的代码(如下),全是一个一个方块,求解!!!!



5 个回复

倒序浏览
明显是没有认真参照老毕的代码。codeTable 中的0、1、2等数字要加单引号的,否则就成了ascii表上第0、1、2个字符,它们就是这些乱码。
回复 使用道具 举报
fantacyleo 发表于 2014-8-7 10:42
明显是没有认真参照老毕的代码。codeTable 中的0、1、2等数字要加单引号的,否则就成了ascii表上第0、1、2 ...

我按照你的方法,把0到9的数字都加上了单引号,那为什么还有方块出现?如下图

回复 使用道具 举报
席杰 发表于 2014-8-10 15:21
我按照你的方法,把0到9的数字都加上了单引号,那为什么还有方块出现?如下图

...

因为你把每一位的值存入数组时是从数组末尾开始存的,可打印输出是从数组开头开始打印。数组开头的值并没有被重新赋值,保留的还是char数组的默认初始值'\0',当然会乱码啦。
回复 使用道具 举报
fantacyleo 发表于 2014-8-10 15:25
因为你把每一位的值存入数组时是从数组末尾开始存的,可打印输出是从数组开头开始打印。数组开头的值并没 ...

太谢谢你了,终于明白了,以前也遇到过打印这些方块乱码的,一直也不太懂怎么回事,就糊里糊涂的过去了,今天终于懂了。在定义char[] codeTable中的数字时,我用MyEclips也没添加单引号,也没报错,我还以为一切OK呢,看来不加单引号也是有区别的。谢谢你了:)
回复 使用道具 举报
席杰 发表于 2014-8-10 15:37
太谢谢你了,终于明白了,以前也遇到过打印这些方块乱码的,一直也不太懂怎么回事,就糊里糊涂的过去了, ...

不用客气:handshake
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马