二进制转八进制

思路分析

例如二进制:0010 1011,存放在字符串数组String[] str2={"0010","1011"}中
设String[] str= {"000","001","010","011","100","101","110","111"};
首先将str2中每个字符串拆分成单个字符存放到字符数组char[] c=new char[str2.length*4]中
声明字符数组char[] str8,但str8的长度不确定,需要根据以下两者情况进行分类:
    情况一:
    若c.length%3!=0,即字符数组C中,进行三个字符一组,无法整分,有多余的字符,这种情况下,设str8=new char[c.length/3+1]
    例如:00101011
    情况二:
    若c.length%3==0,即字符数组C中,进行三个字符一组,可以整分,这种情况下,设str8=new char[c.length/3]
    例如:001010110011
接下来就根据c中的字符进行三个一组进行分组:
对于c.length%3!=0的情况,又可分成以下两种情况:
    若c.length%3==2,例如:00101011,则s="0"+c[0]+c[1];,即前两个元素加上"0"为一组,剩下的元素每三个字符为一组,即    分成000、101、011,字符串"000"在str中的索引下标为0,则二进制000对应的八进制为0,同理字符串"101"在str中的索引下标为5,则二进制101对应的八进制为5。
    若c.length%3==1,例如:0010101100100010,则s="00"+c[0];,即前一个元素加上"00"为一组,剩下的元素每三个字符为一组,然后再进行同上的操作。
对于c.length%3==0的情况,以三个字符为一组,可以整分

代码

private static char[] Convert2To8(String[] str2) {
    char[] c=new char[str2.length*4];
    int j=0;
    for(int i=0;i<str2.length;i++) {
        c[j++]=str2[i].charAt(0);
        c[j++]=str2[i].charAt(1);
        c[j++]=str2[i].charAt(2);
        c[j++]=str2[i].charAt(3);
    }
    String s;
    char[] str8;
    int k=0;
    if(c.length%3!=0) {
        str8=new char[c.length/3+1];
        if((3-(c.length%3))==1) {
            s="0"+c[0]+c[1];
            str8[k++]=isWho8(s);
            for(int i=2;i<c.length-2;i=i+3) {
                s=""+c[i]+c[i+1]+c[i+2];
                str8[k++]=isWho8(s);
            }
        }else if(3-(c.length%3)==2) {
            s="00"+c[0];
            str8[k++]=isWho8(s);
            for(int i=1;i<c.length-2;i=i+3) {
                s=""+c[i]+c[i+1]+c[i+2];
                str8[k++]=isWho8(s);
            }
        }
    }else {
        str8=new char[c.length/3];
        for(int i=0;i<c.length-2;i=i+3) {
            s=""+c[i]+c[i+1]+c[i+2];
            str8[k++]=isWho8(s);
        }
    }
    return str8;
}
private static char isWho8(String s) {
    char c='0';
    String[] str= {"000","001","010","011","100","101","110","111"};
    for(int i=0;i<str.length;i++) {
        if(s.equals(str[i])) {
            c=(char) (i+'0');
            break;
        }
    }
    return c;
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小码boy!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值