| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 | 
							- using System;
 
- using System.Collections.Generic;
 
- using System.Linq;
 
- using System.Numerics;
 
- namespace Masuit.Tools.Excel
 
- {
 
-     /// <summary>
 
-     /// 数制格式化器
 
-     /// </summary>
 
-     internal class NumberFormater
 
-     {
 
-         /// <summary>
 
-         /// 数制表示字符集
 
-         /// </summary>
 
-         internal string Characters { get; set; }
 
-         /// <summary>
 
-         /// 进制长度
 
-         /// </summary>
 
-         public int Length => Characters.Length;
 
-         /// <summary>
 
-         /// 起始值偏移
 
-         /// </summary>
 
-         private readonly int _offset;
 
-         /// <summary>
 
-         /// 数制格式化器
 
-         /// </summary>
 
-         public NumberFormater()
 
-         {
 
-             Characters = "0123456789";
 
-         }
 
-         /// <summary>
 
-         /// 数制格式化器
 
-         /// </summary>
 
-         /// <param name="characters">符号集</param>
 
-         /// <param name="offset">起始值偏移</param>
 
-         public NumberFormater(string characters, int offset = 0)
 
-         {
 
-             if (string.IsNullOrEmpty(characters))
 
-             {
 
-                 throw new ArgumentException("符号集不能为空");
 
-             }
 
-             Characters = characters;
 
-             _offset = offset;
 
-         }
 
-         /// <summary>
 
-         /// 数制格式化器
 
-         /// </summary>
 
-         /// <param name="bin">进制</param>
 
-         /// <param name="offset">起始值偏移</param>
 
-         public NumberFormater(int bin, int offset = 0)
 
-         {
 
-             if (bin < 2)
 
-             {
 
-                 bin = 2;
 
-             }
 
-             if (bin > 64)
 
-             {
 
-                 throw new ArgumentException("默认进制最大支持64进制");
 
-             }
 
-             Characters = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+/".Substring(0, bin);
 
-             _offset = offset;
 
-         }
 
-         /// <summary>
 
-         /// 数字转换为指定的进制形式字符串
 
-         /// </summary>
 
-         /// <param name="number"></param>
 
-         /// <returns></returns>
 
-         public string ToString(long number)
 
-         {
 
-             List<string> result = new List<string>();
 
-             long t = Math.Abs(number);
 
-             while (t != 0)
 
-             {
 
-                 var mod = t % Length;
 
-                 t = Math.Abs(t / Length);
 
-                 var character = Characters[Convert.ToInt32(mod) - _offset].ToString();
 
-                 result.Insert(0, character);
 
-             }
 
-             if (number < 0)
 
-             {
 
-                 result.Insert(0, "-");
 
-             }
 
-             return string.Join("", result);
 
-         }
 
-         /// <summary>
 
-         /// 数字转换为指定的进制形式字符串
 
-         /// </summary>
 
-         /// <param name="number"></param>
 
-         /// <returns></returns>
 
-         public string ToString(BigInteger number)
 
-         {
 
-             List<string> result = new List<string>();
 
-             if (number < 0)
 
-             {
 
-                 number = -number;
 
-                 result.Add("0");
 
-             }
 
-             BigInteger t = number;
 
-             while (t != 0)
 
-             {
 
-                 var mod = t % Length;
 
-                 t = BigInteger.Abs(BigInteger.Divide(t, Length));
 
-                 var character = Characters[(int)mod - _offset].ToString();
 
-                 result.Insert(0, character);
 
-             }
 
-             return string.Join("", result);
 
-         }
 
-         /// <summary>
 
-         /// 指定字符串转换为指定进制的数字形式
 
-         /// </summary>
 
-         /// <param name="str"></param>
 
-         /// <returns></returns>
 
-         public long FromString(string str)
 
-         {
 
-             int j = 0;
 
-             return new string(str.ToCharArray().Reverse().ToArray()).Where(ch => Characters.Contains(ch)).Sum(ch => (Characters.IndexOf(ch) + _offset) * (long)Math.Pow(Length, j++));
 
-         }
 
-         /// <summary>
 
-         /// 指定字符串转换为指定进制的大数形式
 
-         /// </summary>
 
-         /// <param name="str"></param>
 
-         /// <returns></returns>
 
-         public BigInteger FromStringBig(string str)
 
-         {
 
-             int j = 0;
 
-             var chars = new string(str.ToCharArray().Reverse().ToArray()).Where(ch => Characters.Contains(ch));
 
-             return chars.Aggregate(BigInteger.Zero, (current, c) => current + (Characters.IndexOf(c) + _offset) * BigInteger.Pow(Length, j++));
 
-         }
 
-         /// <summary>Returns a string that represents the current object.</summary>
 
-         /// <returns>A string that represents the current object.</returns>
 
-         public override string ToString()
 
-         {
 
-             return Length + "进制模式,进制符:" + Characters;
 
-         }
 
-     }
 
- }
 
 
  |