zoukankan      html  css  js  c++  java
  • 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 }

    写完,刚好6点,收拾下班

  • 相关阅读:
    win10+anaconda+cuda配置dlib,使用GPU对dlib的深度学习算法进行加速(以人脸检测为例)
    Windows下的Anaconda+OpenCV的环境配置
    视频检测人脸添加帽子完美方案
    OpenCV学习C++接口 Mat像素遍历详解
    [hadoop读书笔记] 第一章 初识 Hadoop
    [hadoop读书笔记]前言
    [hadoop读书笔记]译者序
    [Docker] Docker简介
    [sqoop1.99.6] 基于1.99.6版本的一个小例子
    [sqoop1.99.7] sqoop实例——数据ETL
  • 原文地址:https://www.cnblogs.com/linxuanchen/p/2336099.html
Copyright © 2011-2022 走看看