using System; using System.Collections.Generic; using System.Linq; namespace Masuit.Tools.Strings { /// /// 数制格式化器 /// public class NumberFormater { /// /// 数制表示字符集 /// private string Characters { get; set; } /// /// 进制长度 /// public int Length => Characters?.Length ?? 0; /// /// 数制格式化器 /// public NumberFormater() { Characters = "0123456789"; } /// /// 数制格式化器 /// /// 进制转换 public NumberFormater(string characters) { Characters = characters; } /// /// 数制格式化器 /// /// 进制 public NumberFormater(int bin) { if (bin < 2) { bin = 2; } if (bin > 62) { throw new ArgumentException("进制最大支持62进制"); } Characters = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".Substring(0, bin); } /// /// 数字转换为指定的进制形式字符串 /// /// /// public string ToString(long number) { List result = new List(); long t = number; while (t > 0) { var mod = t % Length; t = Math.Abs(t / Length); var character = Characters[Convert.ToInt32(mod)].ToString(); result.Insert(0, character); } return string.Join("", result.ToArray()); } /// /// 指定字符串转换为指定进制的数字形式 /// /// /// public long FromString(string str) { long result = 0; int j = 0; foreach (var ch in new string(str.ToCharArray().Reverse().ToArray())) { if (Characters.Contains(ch)) { result += Characters.IndexOf(ch) * (long)Math.Pow(Length, j); j++; } } return result; } /// Returns a string that represents the current object. /// A string that represents the current object. public override string ToString() { return Length + "模式"; } } }