1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace ConsoleApplication1 7 { 8 9 public class Number 10 { 11 public string Characters 12 { 13 get; 14 set; 15 } 16 17 public int Length 18 { 19 get 20 { 21 if (Characters != null) 22 return Characters.Length; 23 else 24 return 0; 25 } 26 27 } 28 29 public Number() 30 { 31 Characters = "0123456789"; 32 } 33 34 public Number(string characters) 35 { 36 Characters = characters; 37 } 38 39 ///40 /// 数字转换为指定的进制形式字符串 41 /// 42 /// 43 ///44 public string ToString(long number) 45 { 46 List result = new List (); 47 long t = number; 48 49 while (t > 0) 50 { 51 var mod = t % Length; 52 t = Math.Abs(t / Length); 53 var character = Characters[Convert.ToInt32(mod)].ToString(); 54 result.Insert(0, character); 55 } 56 57 return string.Join("", result.ToArray()); 58 } 59 60 /// 61 /// 指定字符串转换为指定进制的数字形式 62 /// 63 /// 64 ///65 public long FromString(string str) 66 { 67 long result = 0; 68 int j = 0; 69 foreach (var ch in new string(str.ToCharArray().Reverse().ToArray())) 70 { 71 if (Characters.Contains(ch)) 72 { 73 result += Characters.IndexOf(ch) * ((long)Math.Pow(Length, j)); 74 j++; 75 } 76 } 77 return result; 78 } 79 80 } 81 82 83 84 class Program 85 { 86 static void Print(long number, Number adapter) 87 { 88 Console.WriteLine("输入数字:{0}", number); 89 Console.WriteLine("规则:{0}\t\t进制:{1}进制", adapter.Characters,adapter.Length); 90 var numtostr = adapter.ToString(number); 91 Console.WriteLine("转换结果:{0}", numtostr); 92 var strtonum = adapter.FromString(numtostr); 93 Console.WriteLine("逆向转换结果:{0}", strtonum); 94 Console.WriteLine(); 95 Console.WriteLine("============ 无聊的分割线 ============"); 96 Console.WriteLine(); 97 } 98 99 static void Main(string[] args)100 {101 //传统的2进制102 Number n1 = new Number("01");103 //传统的8进制104 Number n2 = new Number("01234567");105 //传统的16进制106 Number n3 = new Number("0123456789ABCDEF");107 //自定义编码的N进制,这个可以用来做验证码?108 Number n4 = new Number("爹妈说名字太长躲在树后面会被部落发现");109 //山寨一个短网址110 Number n5 = new Number("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ");111 112 Print(65535, n1);113 Print(65535, n2);114 Print(65535, n3);115 Print(65535, n4);116 Print(165535, n5);117 118 Console.ReadKey();119 120 }121 }122 }