using System; using System.Collections.Generic; /// /// 36进制换算 /// public class Scale36 { /// /// 进制符号字符串 /// private static string scString = "0123456789ABCDEFGHJKLMNPQRSTUVWXYZ"; /// /// 字符集,可以根据编号索引拿到字符 /// private static char[] scArray = scString.ToCharArray(); /// /// 字符字典,可以根据字符拿到编号索引 /// private static Dictionary scDic = ToCharDic(); /// /// 根据字符串反馈进制数 /// public static int Len { get { return scString.Length; } } /// /// 将字符串处理成字符字典 /// private static Dictionary ToCharDic() { Dictionary dic = new Dictionary(); for (int i = 0; i < scArray.Length; i++) { dic.Add(scArray[i], i); } return dic; } /// /// 根据传入的字符符号定义进制,字符符号不能重复,模拟十进制字符串为:0123456789 /// public static void SetScale(string scaleString) { scString = scaleString; scArray = scString.ToCharArray(); scDic = ToCharDic(); } /// /// 将Int64转成当前进制字符串 /// public static string ToCurr36(long num) { string curr = ""; while (num >= Len) { curr = scArray[num % Len] + curr; num = num / Len; } curr = scArray[num] + curr; return curr; } /// /// 将当前进制字符串转成Int /// public static long ToInt(string curr) { double num = 0; for (int i = 0; i < curr.Length; i++) { num += scDic[curr[i]] * Math.Pow(Len, curr.Length - 1 - i); } return Convert.ToInt32(num); } }