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