C#实现整型数据字任意编码任意进制的转换和逆转换
实现如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
public class Number
{
public string Characters
{
get;
set;
}
public int Length
{
get
{
if (Characters != null)
return Characters.Length;
else
return 0;
}
}
public Number()
{
Characters = "0123456789";
}
public Number(string characters)
{
Characters = characters;
}
/// <summary>
/// 数字转换为指定的进制形式字符串
/// </summary>
/// <param name="number"></param>
/// <returns></returns>
public string ToString(long number)
{
List<string> result = new List<string>();
long t = number;
while (t > 0)
{
var mod = t % Length;
t = Math.Abs(t / Length);
var character = Characters[Convert.ToInt32(mod)].ToString();
result.Insert(0, character);
}
return string.Join("", result.ToArray());
}
/// <summary>
/// 指定字符串转换为指定进制的数字形式
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public long FromString(string str)
{
long result = 0;
int j = 0;
foreach (var ch in new string(str.ToCharArray().Reverse().ToArray()))
{
if (Characters.Contains(ch))
{
result += Characters.IndexOf(ch) * ((long)Math.Pow(Length, j));
j++;
}
}
return result;
}
}
class Program
{
static void Print(long number, Number adapter)
{
Console.WriteLine("输入数字:{0}", number);
Console.WriteLine("规则:{0}\t\t进制:{1}进制", adapter.Characters,adapter.Length);
var numtostr = adapter.ToString(number);
Console.WriteLine("转换结果:{0}", numtostr);
var strtonum = adapter.FromString(numtostr);
Console.WriteLine("逆向转换结果:{0}", strtonum);
Console.WriteLine();
Console.WriteLine("============ 无聊的分割线============");
Console.WriteLine();
}
static void Main(string[] args)
{
//传统的2进制
Number n1 = new Number("01");
//传统的8进制
Number n2 = new Number("01234567");
//传统的16进制
Number n3 = new Number("0123456789ABCDEF");
//自定义编码的N进制,这个可以用来做验证码?
Number n4 = new Number("爹妈说名字太长躲在树后面会被部落发现");
//山寨一个短网址
Number n5 = new Number("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ");
Print(65535, n1);
Print(65535, n2);
Print(65535, n3);
Print(65535, n4);
Print(165535, n5);
Console.ReadKey();
}
}
}
C#实现整型数据字任意编码任意进制的转换和逆转换的更多相关文章
- C# 整型数和浮点型数的进制转换
1.十进制转二进制 /// <summary> /// 十进制转二进制 /// </summary> public class Convert10To2 { /// <s ...
- ColorUtil【Color工具类(color整型、rgb数组、16进制互相转换)】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 主要用于color整型.rgb数组.16进制互相转换(-12590395 <--> #3FE2C5 <--> ...
- java 整型相除得到浮点型
public class TestFloatOrDouble { public static void main(String[] args) { Point num1 = new Point(84, ...
- 【CSAPP笔记】2. 整型运算
现在想补补推荐这本书的理由. Most books on systems-computer architecture, compilers, operating systems, and networ ...
- java中大整型BigInteger及setBit和testBit方法
最近在修改公司之前的项目,在项目中遇到了权限校验的问题,代码中出现了BigInteger的setBit()testBit()方法,之前未接触过,所以了解了下BigInteger. 在Java中,由CP ...
- Python入门篇-基础数据类型之整型(int),字符串(str),字节(bytes),列表(list)和切片(slice)
Python入门篇-基础数据类型之整型(int),字符串(str),字节(bytes),列表(list)和切片(slice) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Py ...
- 写出将字符串中的数字转换为整型的方法,如:“as31d2v”->312,并写出相应的单元测试,正则去掉非数值、小数点及正负号外的字符串
写出将字符串中的数字转换为整型的方法,如:"as31d2v"->312,并写出相应的单元测试,输入超过int范围时提示不合法输入. public struct Convert ...
- 【C语言入门教程】2.3 整型数据
没有小数位或指数的数据类型被称为整型数据,根据使用方法的分类,整型数据可分为整型常量和整型变量.根据定义或显示的数制分类,可分为十进制.八进制和十六进制. 2.3.1 整型常量 整型常量是在运算中不可 ...
- 基础数据类型:整型int、布尔值bool、字符串str、与for循环
1.整型 int() p2 long 长整型 p3 全部都是整型 2.布尔值 bool() True --- int() int(True) int() --- True bool(int) 注意点: ...
随机推荐
- linux使用jq工具解析json
jq类似一个awk或grep一样的神器,可以方便地在命令行操作json 这里我使用海南万宁的天气接口做演示,地址:http://t.weather.sojson.com/api/weather/cit ...
- window下设置定时任务及基本配置
### window下设置定时任务及基本配置 轉載請註明出處: https://www.cnblogs.com/funnyzpc/p/11746439.html |****************** ...
- [洛谷P3709]大爷的字符串题
题目传送门 不用管它随机什么的,就用贪心的思想去想, 会发现这道题的实质是:求查询区间众数出现次数. 莫队即可解决. 注意字符集1e9,要离散化处理. #include <bits/stdc++ ...
- 百万年薪python之路 -- socket()模块的用法
socket()模块的用法: import socket socket.socket(socket_family,socket_type,protocal=0) socket_family 可以是 A ...
- JVM 知识点补充——永久代和元空间
之前已经讲过了不少有关 JVM 的内容,今天准备将之前没有细讲的部分进行补充,比如:永久代和元空间. 永久代 Java 的内存中有一块称之为方法区的部分,在 JDK8 之前, Hotspot 虚拟机中 ...
- Kafka常用操作备忘
启动nohup ./bin/zookeeper-server-start.sh config/zookeeper.properties &nohup ./bin/kafka-server-st ...
- 彻底解决 Mechanism level: Failed to find any Kerberos tgt
错误描述 Secure Client Cannot Connect ([Caused by GSSException: No valid credentials provided(Mechanism ...
- 设计模式C++描述----22.访问者(Visitor)模式
一. 访问者模式 定义:表示一个作用于某对象结构中的各元素的操作.它你可以在不改变各元素的类的前提下定义作用于这些元素的新操作. 结构如下: 二. 举例 假设有一项科学实验,是用来对比两种种子在不同环 ...
- 设计模式C++描述----18.中介者(Mediator)模式
一. 举例 比如,现在中图和日本在关于钓鱼岛问题上存在争端.这时,联合国就会站出来,做为调解者,其实也没什么好调解的,钓鱼岛本来就是中国的,这是不争的事实!联合国也就是个传话者.发言人. 结构图如下: ...
- 在ArangoDB中实现connectedcomponents算法
操作环境: tool:ArangoDB 3.3.13 操作系统:Debian 7.2.0-20 概念: Connected Components即连通体算法.用id标注图中每个连通体,将连通体中序号最 ...