数值转36进制

private static char[] CHARS = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray(); 
    
    /**
     * 转字符串
     * @param num
     * @return
     */
    public static String encode(long num) {
        StringBuffer stringBuffer = new StringBuffer();

        if(num == 0) {
            stringBuffer.append(CHARS[0]);
        }
        
        while(num > 0) {
            stringBuffer.append(CHARS[(int) (num % 36)]);
            num = num / 36;
        }

        return stringBuffer.reverse().toString();
    }
    
    /**
     * 转数值
     * @param code
     * @return
     */
    public static long decode(String code) {
        Map<Character, Integer> map = new HashMap<Character, Integer>();
        for (int i = 0; i < CHARS.length; i++) {
            map.put(CHARS[i], i);
        }

        int size = code.length();
        long num = 0;
        for(int i = 0; i<size; i++) {
            String char2str = String.valueOf(code.charAt(i)).toUpperCase();
            num = (long) (map.get(char2str.charAt(0)) * Math.pow(36, size - i - 1) + num);
        }

        return num;
    }

 

posted @ 2020-05-25 10:19  rubekid  阅读(396)  评论(0编辑  收藏  举报