• [转]使用C#实现长整型向任意编码的转换和逆转换


       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:           /// <summary>
      40:   /// 数字转换为指定的进制形式字符串
      41:   /// </summary>
      42:   /// <param name="number"></param>
      43:   /// <returns></returns>
      44:           public string ToString(long number)
      45:           {
      46:               List<string> result = new List<string>();
      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:           /// <summary>
      61:   /// 指定字符串转换为指定进制的数字形式
      62:   /// </summary>
      63:   /// <param name="str"></param>
      64:   /// <returns></returns>
      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:   }


    原文地址:
    http://www.cnblogs.com/linxuanchen/archive/2012/02/02/2336099.html

  • 相关阅读:
    Linux 中 /proc/meminfo 的含义
    Linux OOM-killer(内存不足时kill高内存进程的策略)
    java反射
    IDEA 创建Web项目
    centos7 源码安装php7
    linux 基本原则和常用命令
    ls file less
    centos7安装nginx1.10.1
    mysqlworkbench访问远程服务器
    redis 简单的注册
  • 原文地址:https://www.cnblogs.com/chaosimple/p/2707036.html
Copyright © 2020-2023  润新知