64进制转10进制-->10进制转62进制-->62转10-->10转64

本文详细介绍了将62进制转换为10进制的方法,并展示了将其转换为64进制的过程。通过实例演示了转换算法的应用,包括字符串到数字的转换和数字到字符串的反向转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

private static String s = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
	
	private static char[] charSet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".toCharArray();    

	final static char[] digits = {  
        '0' , '1' , '2' , '3' , '4' , '5' ,  
        '6' , '7' , '8' , '9' , 'a' , 'b' ,  
        'c' , 'd' , 'e' , 'f' , 'g' , 'h' ,  
        'i' , 'j' , 'k' , 'l' , 'm' , 'n' ,  
        'o' , 'p' , 'q' , 'r' , 's' , 't' ,  
        'u' , 'v' , 'w' , 'x' , 'y' , 'z' ,  
        'A' , 'B' , 'C' , 'D' , 'E' , 'F' ,  
        'G' , 'H' , 'I' , 'J' , 'K' , 'L' ,  
        'M' , 'N' , 'O' , 'P' , 'Q' , 'R' ,  
        'S' , 'T' , 'U' , 'V' , 'W' , 'X' ,  
        'Y' , 'Z' , '+' , '/'  ,  
        };  
	public static void main(String[] args) {
		
		
//		System.out.println("[1001]64-to-十进制:"+_64_to_10("1001")+"---十进制 to 62:"+ChannelCodeUtil._10_to_62(_64_to_10("1001"),1)+"---62 to 十进制:"+Long.parseLong(ChannelCodeUtil._62_to_10(ChannelCodeUtil._10_to_62(_64_to_10("1001"),1)))+"---十进制 to 64:"+_10_to_64(Long.parseLong(ChannelCodeUtil._62_to_10(ChannelCodeUtil._10_to_62(_64_to_10("1001"),1))),6));  
//    	System.out.println("[E0001]64-to-十进制:"+_64_to_10("E0001")+"---十进制 to 62:"+ChannelCodeUtil._10_to_62(_64_to_10("E0001"),1)+"---62 to 十进制:"+Long.parseLong(ChannelCodeUtil._62_to_10(ChannelCodeUtil._10_to_62(_64_to_10("E0001"),1)))+"---十进制 to 64:"+_10_to_64(Long.parseLong(ChannelCodeUtil._62_to_10(ChannelCodeUtil._10_to_62(_64_to_10("E0001"),1))),6));  
//    	System.out.println("[sy]64 to-十-进制:"+_64_to_10("SYPD")+"---十进制 to 62:"+ChannelCodeUtil._10_to_62(_64_to_10("SYPD"),1)+"---62 to 十进制:"+Long.parseLong(ChannelCodeUtil._62_to_10(ChannelCodeUtil._10_to_62(_64_to_10("SYPD"),1)))+"---十进制 to 64:"+_10_to_64(Long.parseLong(ChannelCodeUtil._62_to_10(ChannelCodeUtil._10_to_62(_64_to_10("SYPD"),1))),6));  
//    	System.out.println("[abc]64-to-十进制:"+_64_to_10("abc")+"---十进制 to 62:"+ChannelCodeUtil._10_to_62(_64_to_10("abc"),1)+"--- 62 to 十进制:"+Long.parseLong(ChannelCodeUtil._62_to_10(ChannelCodeUtil._10_to_62(_64_to_10("abc"),1)))+"---十进制 to 64:"+_10_to_64(Long.parseLong(ChannelCodeUtil._62_to_10(ChannelCodeUtil._10_to_62(_64_to_10("abc"),1))),6));  

		
	}
/** 
     * 将62进制转换成10进制数 
     *  
     * @param ident62 
     * @return 
     */  
    public static String _62_to_10( String ident62 ) {  
        int decimal = 0;  
        int base = 62;  
        int keisu = 0;  
        int cnt = 0;  
  
        byte ident[] = ident62.getBytes();  
        for ( int i = ident.length - 1; i >= 0; i-- ) {  
            int num = 0;  
            if ( ident[i] > 48 && ident[i] <= 57 ) {  
                num = ident[i] - 48;  
            }  
            else if ( ident[i] >= 65 && ident[i] <= 90 ) {  
                num = ident[i] - 65 + 10;  
            }  
            else if ( ident[i] >= 97 && ident[i] <= 122 ) {  
                num = ident[i] - 97 + 10 + 26;  
            }  
            keisu = (int) java.lang.Math.pow( (double) base, (double) cnt );  
            decimal += num * keisu;  
            cnt++;  
        }  
        return String.format( "%08d", decimal );  
    }  
    /** 
     * 把64进制的字符串转换成10进制 
     * @param decompStr 
     * @return 
     */  
    private static long _64_to_10(String decompStr)  
    {  
        long result=0;  
        for (int i =  decompStr.length()-1; i >=0; i--) {  
            if(i==decompStr.length()-1)  
            {  
                result+=getCharIndexNum(decompStr.charAt(i));  
                continue;  
            }  
            for (int j = 0; j < digits.length; j++) {  
                if(decompStr.charAt(i)==digits[j])  
                {  
                    result+=((long)j)<<6*(decompStr.length()-1-i);  
                }  
            }  
        }  
        return result;  
    }     
	
    /** 
     * 把10进制的数字转换成64进制 
     * @param number 
     * @param shift 
     * @return 
     */  
    private static String _10_to_64(long number, int shift) {  
        char[] buf = new char[64];  
        int charPos = 64;  
        int radix = 1 << shift;  
        long mask = radix - 1;  
        do {  
            buf[--charPos] = digits[(int)(number & mask)];  
            number >>>= shift;  
        } while (number != 0);  
        return new String(buf, charPos, (64 - charPos));  
       }  
    
    /** 
     *  
     * @param ch 
     * @return 
     */  
    private static long getCharIndexNum(char ch)  
    {  
        int num=((int)ch);  
        if(num>=48&&num<=57)  
        {  
            return num-48;  
        }  
        else if(num>=97&&num<=122)  
        {  
            return num-87;  
        }else if(num>=65&&num<=90)  
        {  
            return num-29;  
        }else if(num==43)  
        {  
            return 62;  
        }  
        else if (num == 47)  
        {  
            return 63;  
        }  
        return 0;  
    }  
    /** 
     * 将10进制转化为62进制  
     * @param number  
     * @param length 转化成的62进制长度,不足length长度的话高位补0,否则不改变什么 
     * @return 
     */  
    public static String _10_to_62(long number, int length){  
         Long rest=number;  
         Stack<Character> stack=new Stack<Character>();  
         StringBuilder result=new StringBuilder(0);  
         while(rest!=0){  
             stack.add(charSet[new Long((rest-(rest/62)*62)).intValue()]);  
             rest=rest/62;  
         }  
         for(;!stack.isEmpty();){  
             result.append(stack.pop());  
         }  
         int result_length = result.length();  
         StringBuilder temp0 = new StringBuilder();  
         for(int i = 0; i < length - result_length; i++){  
             temp0.append('0');  
         } 
         
         return temp0.toString() + result.toString();  
  
    }


转载于:https://my.oschina.net/easonwang14/blog/628951

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值