博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#实现整型数据字任意编码任意进制的转换和逆转换
阅读量:6577 次
发布时间:2019-06-24

本文共 3506 字,大约阅读时间需要 11 分钟。

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

 

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

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

转载于:https://www.cnblogs.com/tianjifa/p/9217014.html

你可能感兴趣的文章
你为什么一定要去美国?给我一个理由
查看>>
JS -------------------设置弹出框位置屏幕的中间
查看>>
几个内核有关的命令
查看>>
第一章 大网 GNS3 使用
查看>>
性能测试 vbs使用(一)
查看>>
46Exchange 2010升级到Exchange 2013-移除总部CAS2010
查看>>
1.2 linux哲学思想
查看>>
Android机子屏幕适配最简单最全面方案
查看>>
spring拦截器中的事务管理
查看>>
有信网络电话被KC网络电话收购了吗?
查看>>
Java 解析 python使用 pickle序列化后的数据
查看>>
Redis 列表(List)
查看>>
爬虫爬取的网易云热门歌单
查看>>
maxwell的使用--日志增量订阅&消费
查看>>
【示例教程】如何使用LEADTOOLS 的JAVA接口从护照中识别和提取数据
查看>>
关于studio升级 部分报错 查找原因的方法--个人总结
查看>>
Java通信编程 Java Scoket
查看>>
简单对比WDCP与宝塔面板WEB环境区别与选择建议
查看>>
PostgreSQL全文检索简介
查看>>
Canvas学习:globalCompositeOperation详解
查看>>