• 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}		进制:{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 }

    更多内容请访问 www.uusystem.com


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

  • 相关阅读:
    快速免费用宝塔面板加开源小程序商城源码搭建自己的商城程序
    小程序商城,到底是购买源码好还是直接使用SaaS平台好?
    51单片机串口通信的注记
    关于vi 分屏的一些指令
    偶遇bash 的while read line 的问题
    centos 6 设置无密码登录ssh 不成功问题
    关于js框架 dwz 与 yii的的分页 以及筛选的结合
    完美解决百度地图MarkerClusterer 移动地图时,Marker 的Label 丢失的问题
    微信小程序购物商城系统开发系列-目录结构
    微信小程序支付步骤
  • 原文地址:https://www.cnblogs.com/tianjifa/p/9217014.html
Copyright © 2020-2023  润新知