好玩的十进制转N进制代码

[ 15446 查看 / 3 回复 ]

10进制转2、8、16进制大家平常都用的比较多,但是10进制转N进制想必各位很少用吧,比如10进制转3、9、17 进制。

下面的算法实现了将10进制和N进制的互相转换,有趣的是你可以自定义N进制用到的字符,这样转换后的N进制字符串具有一定的迷惑性,可以作为加密解密数字的简单方法。

我将N进制字符设置成"中华人民共和国"便得到下面的加密结果:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;

  4. namespace base36
  5. {
  6. class Program
  7. {
  8. static string baseNString = "中华人民共和国";//N进制字符串
  9. //static string baseNString = "01";//2进制字符串
  10. //static string baseNString = "01234567";//8进制字符串
  11. //static string baseNString = "012345678ABCDEF";//16进制字符串
  12. //static string baseNString = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";//36进制字符串

  13. static void Main(string[] args)
  14. {

  15. Random rnd=new Random();

  16. while (true)
  17. {
  18. long input = rnd.Next(0, int.MaxValue);

  19. string result = ToBaseNString(input);

  20. Console.WriteLine("{0} - {1} - {2}", input, result, FromBaseNString(result));
  21. System.Threading.Thread.Sleep(1000);
  22. }

  23. }

  24. static long FromBaseNString(string input)
  25. {
  26. long sum = 0;
  27. for (int i = 0; i < input.Length; i++)
  28. {
  29. char c = input[i];
  30. sum += baseNString.IndexOf(c) * (long)Math.Pow(baseNString.Length, input.Length - i - 1);
  31. }
  32. return sum;
  33. }


  34. static string ToBaseNString(long input)
  35. {
  36. string result = "";
  37. long num = input;
  38. while(num!=0)
  39. {
  40. long y = num % baseNString.Length;
  41. result = baseNString[(int)y].ToString() + result;
  42. num = num / baseNString.Length;
  43. }
  44. return result;
  45. }
  46. }
  47. }
复制代码
原创的免费软件 - LoopcVPN,DnsAcc,DNS加速器,百度相册助手
引用 TOP