URL短编码,10位与64位的转化
package com.yuxd._10to64;public class Encode10 {//十进制转化为64进制public static String encode(long origin){int position=0;String ret="";String binary=Long.toBinaryString(origin);System.out.println(Long.parseLong(binary, 2));position=binary.length()-1;while(position>=0){String subString=binary.substring((position-5>0?position-5:0), position+1);long tempValue=Long.parseLong(subString, 2);ret=Character.toString(code[(int)tempValue])+ret;position=position-6;}return ret;}//64进制转化为10进制public static long decode(String origin){int stringPosition=0;Long ret=0L;while(stringPosition<origin.length()){for(int i=0;i<code.length;i++){if(origin.charAt(stringPosition)==code[i]){ret=ret+pow(64,origin.length()-stringPosition-1)*i;}}stringPosition+=1;}return ret;}//重写math中的pow方法,因为math库中是用double,容易造成问题,所以重写public static long pow(int x,int y){long result=1;while(y>0){result*=x;y--;}return result;}private static final char[] code={'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','+','-','1','2','3','4','5','6','7','8','9','0'};/* * 测试代码 * */public static void main(String[] args){System.out.println(encode(9223372031234123L));System.out.println(decode(encode(92233720361234123L)));}}