10进制转2、8、16进制大家平常都用的比较多,但是10进制转N进制想必各位很少用吧,比如10进制转3、9、17 进制。
下面的算法实现了将10进制和N进制的互相转换,有趣的是你可以自定义N进制用到的字符,这样转换后的N进制字符串具有一定的迷惑性,可以作为加密解密数字的简单方法。
我将N进制字符设置成"中华人民共和国"便得到下面的加密结果:
- using System;
- using System.Collections.Generic;
- using System.Text;
- namespace base36
- {
- class Program
- {
- static string baseNString = "中华人民共和国";//N进制字符串
- //static string baseNString = "01";//2进制字符串
- //static string baseNString = "01234567";//8进制字符串
- //static string baseNString = "012345678ABCDEF";//16进制字符串
- //static string baseNString = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";//36进制字符串
- static void Main(string[] args)
- {
- Random rnd=new Random();
- while (true)
- {
- long input = rnd.Next(0, int.MaxValue);
- string result = ToBaseNString(input);
- Console.WriteLine("{0} - {1} - {2}", input, result, FromBaseNString(result));
- System.Threading.Thread.Sleep(1000);
- }
- }
- static long FromBaseNString(string input)
- {
- long sum = 0;
- for (int i = 0; i < input.Length; i++)
- {
- char c = input[i];
- sum += baseNString.IndexOf(c) * (long)Math.Pow(baseNString.Length, input.Length - i - 1);
- }
- return sum;
- }
- static string ToBaseNString(long input)
- {
- string result = "";
- long num = input;
- while(num!=0)
- {
- long y = num % baseNString.Length;
- result = baseNString[(int)y].ToString() + result;
- num = num / baseNString.Length;
- }
- return result;
- }
- }
- }
复制代码