• 64进制编码转换


    由于项目需要把一个ID(数字)压缩成尽可能短字符串,在网上找来好久没有找到合适,

    自己动手写一个。

    有需要的可以参考一下,也作为自己的一些积累吧!

    代码如下:

    Java代码  收藏代码
    1. /** 
    2.  * 64进制和10进制的转换类 
    3.  * @author Administrator 
    4.  * 
    5.  */  
    6. public class compressEncodeing {  
    7.     final static char[] digits = {  
    8.         '0' , '1' , '2' , '3' , '4' , '5' ,  
    9.         '6' , '7' , '8' , '9' , 'a' , 'b' ,  
    10.         'c' , 'd' , 'e' , 'f' , 'g' , 'h' ,  
    11.         'i' , 'j' , 'k' , 'l' , 'm' , 'n' ,  
    12.         'o' , 'p' , 'q' , 'r' , 's' , 't' ,  
    13.         'u' , 'v' , 'w' , 'x' , 'y' , 'z' ,  
    14.         'A' , 'B' , 'C' , 'D' , 'E' , 'F' ,  
    15.         'G' , 'H' , 'I' , 'J' , 'K' , 'L' ,  
    16.         'M' , 'N' , 'O' , 'P' , 'Q' , 'R' ,  
    17.         'S' , 'T' , 'U' , 'V' , 'W' , 'X' ,  
    18.         'Y' , 'Z' , '+' , '/'  ,  
    19.         };  
    20.     /** 
    21.      * @param args 
    22.      */  
    23.     public static void main(String[] args) {  
    24.         System.out.println(CompressNumber(999999999999999999L,6));   
    25.         System.out.println(UnCompressNumber(CompressNumber(999999999999999999L,6)));  
    26.     }  
    27.     /** 
    28.      * 把10进制的数字转换成64进制 
    29.      * @param number 
    30.      * @param shift 
    31.      * @return 
    32.      */  
    33.     private static String CompressNumber(long number, int shift) {  
    34.         char[] buf = new char[64];  
    35.         int charPos = 64;  
    36.         int radix = 1 << shift;  
    37.         long mask = radix - 1;  
    38.         do {  
    39.             buf[--charPos] = digits[(int)(number & mask)];  
    40.             number >>>= shift;  
    41.         } while (number != 0);  
    42.         return new String(buf, charPos, (64 - charPos));  
    43.        }  
    44.     /** 
    45.      * 把64进制的字符串转换成10进制 
    46.      * @param decompStr 
    47.      * @return 
    48.      */  
    49.     private static long UnCompressNumber(String decompStr)  
    50.     {  
    51.         long result=0;  
    52.         for (int i =  decompStr.length()-1; i >=0; i--) {  
    53.             if(i==decompStr.length()-1)  
    54.             {  
    55.                 result+=getCharIndexNum(decompStr.charAt(i));  
    56.                 continue;  
    57.             }  
    58.             for (int j = 0; j < digits.length; j++) {  
    59.                 if(decompStr.charAt(i)==digits[j])  
    60.                 {  
    61.                     result+=((long)j)<<6*(decompStr.length()-1-i);  
    62.                 }  
    63.             }  
    64.         }  
    65.         return result;  
    66.     }     
    67.     /** 
    68.      *  
    69.      * @param ch 
    70.      * @return 
    71.      */  
    72.     private static long getCharIndexNum(char ch)  
    73.     {  
    74.         int num=((int)ch);  
    75.         if(num>=48&&num<=57)  
    76.         {  
    77.             return num-48;  
    78.         }  
    79.         else if(num>=97&&num<=122)  
    80.         {  
    81.             return num-87;  
    82.         }else if(num>=65&&num<=90)  
    83.         {  
    84.             return num-29;  
    85.         }else if(num==43)  
    86.         {  
    87.             return 62;  
    88.         }  
    89.         else if (num == 47)  
    90.         {  
    91.             return 63;  
    92.         }  
    93.         return 0;  
    94.     }  
    95.   
    96. }  
     
  • 相关阅读:
    [转载]Bison-Flex 笔记
    LeetCode 5 Longest Palindromic Substring manacher算法,最长回文子序列,string.substr(start,len) 难度:2
    LeetCode 6 ZigZag Conversion 模拟 难度:0
    LeetCode 7 Reverse Integer int:2147483647-2147483648 难度:2
    #Leetcode# 383. Ransom Note
    #Leetcode# 92. Reverse Linked List II
    #Leetcode# 143. Reorder List
    #Leetcode# 532. K-diff Pairs in an Array
    #Leetcode# 86. Partition List
    Sudoku
  • 原文地址:https://www.cnblogs.com/exmyth/p/5674563.html
Copyright © 2020-2023  润新知