java实现“进制转换-在线工具”

在实际的开发过程中遇到过这样一个问题:网络的数据传输,为了数据量的小,会把几个字段拼在一起合并成几个字节。
比如我遇到的是,时标合并:日、时、分、秒,这四个字段要求在传输的过程中占3个字节,也就是每个字段占了6位。
我在开发的过程中是先把每一个字段值转成二进制数,位数不够的高位补0,因为设计的时候就已经考虑到,在特殊字段转换中不会超过6位。60—–>111100。
最后我把所有的都拼接成了一个字符串:“010100001101111001011001”,这样的一个24位。3字节数据。然后就需要将这个字符串转成想要的byte数据。做到这突然不知道该怎么做了。然后*大家都知道有一个“进制转换-在线工具”,好奇他的底层代码是怎么实现,SO~~~~

public static void main(String[] args) {
        int n = 18;
        Integer.toHexString(n);
        System.out.println(n + "的二进制是:" + Integer.toBinaryString(n));
        System.out.println(n + "的八进制是:" + Integer.toOctalString(n));
        System.out.println(n + "的十六进制是:" + Integer.toHexString(n));
        System.out.println(n + "的三进制是:" + Integer.toString(n, 3));
    }

//下面是r进制转10进制
//r进制转10进制  方法
//radix进制的字符串s转10进制 Integer.parseInt((String) s,(int) radix);


public class Main {
    public static void main(String[] args) {
        String s = "10101";//1+4+16==21
        System.out.println(Integer.parseInt(s,2));//结果是21

    }
}

重点代码:任意进制之间的转换(不是啦~~~)

package test;

import java.util.Stack;  

/**** 
 * 数字工具,进行42以下的任意进制转换 
 * @author wp
 */  
public class NumericalUtil {  
    private static final String C_CODES_STRING = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$.`";  

    /*** 
     * 将10进制转换为任意进制 
     * @param intVal 
     * @param base <=42 
     * @return 
     */  
    public static String int2CodeString(long intVal,int base)  {  

        int w_code_len = C_CODES_STRING.length();  
        if (base >w_code_len){  
            return null;  
        }  
        StringBuilder sb = new StringBuilder();  
        Stack<String> s=new Stack<String>();  
        while (intVal!=0){  
            s.push(C_CODES_STRING.charAt((int)(intVal%base))+"");  
            intVal/=base;  
        }  
        while (!s.empty()){  
            sb.append(s.pop());  
        }  
        return sb.length()==0?"0":sb.toString();  
    }  
    /*** 
     *  任何进制转换, 
     * @param s 
     * @param srcBase s的进制 
     * @param destBase 要转换为的进制 
     * @return 
     */  
    public static String BaseConvert(String s,int srcBase,int destBase){    
        if(srcBase == destBase){    
            return s;    
        }             
        char[] chars = s.toCharArray();    
        int len = chars.length;    
        if(destBase != 10){//目标进制不是十进制 先转化为十进制    
            s = BaseConvert(s,srcBase,10);    
        }else{    
            long n = 0;    
            for(int i = len - 1; i >=0; i--){    
                n+=C_CODES_STRING.indexOf(chars[i])*Math.pow(srcBase, len - i - 1);    
            }    
            return String.valueOf(n);    
        }    
        return int2CodeString(Integer.valueOf(s),destBase);    
    }

    public static void main(String[] args) {
//      String str=BaseConvert("010100001101111001011001",2,16);
        String str=BaseConvert("20",10,16);
        System.out.println(str);
    }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值