Sparkle’s Workshop

CryptUtil

Posted on December 31, 2007 - Filed Under Uncategorized |

最近翻起一年多前在上一家公司写的代码,发现也有不少工具性质的类,于是整理一下都贴出来吧

    /**
     * 2006-6-10
     * @author Sparkle
     */
    public class CryptUtil {
	/**
	 * 将一个数字转换成0-9a-zA-z的62进制
	 */
	public static String encodeLongToString(long i) {
		if (i == 0) {
			return "0";
		} else if (i < 0) {
			throw new IllegalArgumentException();
		}
		StringBuffer buffer = new StringBuffer();
		while (i > 0) {
			buffer.insert(0, encodeIntToChar((int) (i % 62)));
			i /= 62;
		}
		return buffer.toString();
	}
 
	/**
	 * 将0-9a-zA-z的62进制转换成一个数字
	 */
	public static long decodeStringToLong(String s) {
		long i = 0;
		for (int index = 0; index < s.length(); index++) {
			if (index > 0) {
				i *= 62;
			}
			i += decodeCharToInt(s.charAt(index));
		}
		return i;
	}
 
	/**
	 * 将数字作为顺序转换成单位的0-9a-zA-z<br>
	 * 0 -> '0'<br>
	 * 9 -> '9'<br>
	 * 10 -> 'a'<br>
	 * 35 -> 'z'<br>
	 * 36 -> 'A'<br>
	 * 61 -> 'Z'
	 */
	private static char encodeIntToChar(int i) {
		if (i >= 0 && i <= 9) {
			return (char) (i + 48);
		} else if (i >= 10 && i <= 35) {
			return (char) (i + 87);
		} else if (i >= 36 && i <= 61) {
			return (char) (i + 29);
		} else {
			throw new IllegalArgumentException();
		}
	}
 
	/**
	 * 将单位的0-9a-zA-z按顺序转换成数字<br>
	 * '0' -> 0<br>
	 * '9' -> 9<br>
	 * 'a' -> 10<br>
	 * 'z' -> 35<br>
	 * 'A' -> 36<br>
	 * 'Z' -> 61
	 */
	private static int decodeCharToInt(char c) {
		if (c >= '0' && c <= '9') {
			return c - 48;
		} else if (c >= 'a' && c <= 'z') {
			return c - 87;
		} else if (c >= 'A' && c <= 'Z') {
			return c - 29;
		} else {
			throw new IllegalArgumentException();
		}
	}
    }

代码点评:这段代码的作用是,转换出来的字符串会比16进制要短很多

Most Commented Posts

Comments

Leave a Reply