C#实现整型数据字任意编码任意进制的转换和逆转换

2021-04-02 18:24

阅读:580

标签:span   ++   dex   字符串   line   space   ons   adapter   ext   

  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             Liststring> result = new Liststring>();
 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 }

 


转自:https://www.cnblogs.com/linxuanchen/archive/2012/02/02/2336099.html

C#实现整型数据字任意编码任意进制的转换和逆转换

标签:span   ++   dex   字符串   line   space   ons   adapter   ext   

原文地址:https://www.cnblogs.com/tianjifa/p/9217014.html


评论


亲,登录后才可以留言!