NumberFormater.cs 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. using System;
  2. using System.Linq;
  3. namespace Masuit.Tools.Excel;
  4. /// <summary>
  5. /// 数制格式化器
  6. /// </summary>
  7. internal class NumberFormater
  8. {
  9. /// <summary>
  10. /// 数制表示字符集
  11. /// </summary>
  12. internal string Characters { get; set; }
  13. /// <summary>
  14. /// 进制长度
  15. /// </summary>
  16. public int Length => Characters.Length;
  17. /// <summary>
  18. /// 起始值偏移
  19. /// </summary>
  20. private readonly int _offset;
  21. /// <summary>
  22. /// 数制格式化器
  23. /// </summary>
  24. public NumberFormater()
  25. {
  26. Characters = "0123456789";
  27. }
  28. /// <summary>
  29. /// 数制格式化器
  30. /// </summary>
  31. /// <param name="characters">符号集</param>
  32. /// <param name="offset">起始值偏移</param>
  33. public NumberFormater(string characters, int offset = 0)
  34. {
  35. if (string.IsNullOrEmpty(characters))
  36. {
  37. throw new ArgumentException("符号集不能为空");
  38. }
  39. Characters = characters;
  40. _offset = offset;
  41. }
  42. /// <summary>
  43. /// 指定字符串转换为指定进制的数字形式
  44. /// </summary>
  45. /// <param name="str"></param>
  46. /// <returns></returns>
  47. public long FromString(string str)
  48. {
  49. int j = 0;
  50. return new string(str.ToCharArray().Reverse().ToArray()).Where(ch => Characters.Contains(ch)).Sum(ch => (Characters.IndexOf(ch) + _offset) * (long)Math.Pow(Length, j++));
  51. }
  52. }