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);
}
}