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#实现整型数据字任意编码任意进制的转换和逆转换,布布扣,bubuko.com

时间: 2024-10-11 00:28:41

C#实现整型数据字任意编码任意进制的转换和逆转换的相关文章

各种编码、进制

八进制是每位数字大小从0到7,Octal,缩写OCT或O:十六进制是每位数字大小从0到F,简写为Hex:二进制每位是0到1,十进制每位是0到9, Unicode是足够编码地球上所有的语言了,所以ASCII中所能表示的,Unicode当然全部包括了.Unicode本身是只有2个字节的,之所以出现UTF-8,UTF-16等等之类,那是为了针对不同的应用环境,提高整体编码效率,比如如果某篇文章里绝大部分是英语(单字节就能表示),就比较适合使用utf-8,而如果绝大部分是中文(需要双字节),可能就utf

ColorUtil【Color工具类(color整型、rgb数组、16进制互相转换)】

版权声明:本文为博主原创文章,未经博主允许不得转载. 前言 主要用于color整型.rgb数组.16进制互相转换(-12590395 <--> #3FE2C5 <--> [63,226,197]) 效果图 暂不需要 代码分析 color的int类型值转16进制类型值包括两种方案: 方案一:思路:计算&16777215的值,然后通过字符串获取16进制数值. /**Color的Int整型转Color的16进制颜色值[方案一] * colorInt - -12590395 * r

再回首,Java温故知新(三):Java基本数据类型之整型

注:因为此次学习打算看一遍相关Java源码,所以更新速度一开始会相对慢一些.还有就是不得不佩服那群大牛啊,算法不是一时半会能懂的,本来打算直接弄懂的,后来感觉这样效率太低了,所以决定大体上通读一遍,反正以后肯定还会回来再次学习. Java作为一种强类型语言,意味着每一个变量都会有特定的类型,Java共有8种基本类型,其中有4种整型(byte.short.int.long).两种浮点型(float.double).1种字符型(char)和一种布尔型(boolean),值得注意的是,虽然字符串Str

java 整型相除得到浮点型

1 public class TestFloatOrDouble { 2 3 public static void main(String[] args) { 4 Point num1 = new Point(84, 250); 5 Point num2 = new Point(21, 10); 6 7 float f1 = (num1.y - num2.y) / (num1.x - num2.x); 8 float f2 = (float) (num1.y - num2.y) / (num1.

16进制、编码(编码问题随理解深入持续更新中)

16进制: 十进制转换成8进制: oct ( 数字) 十进制转换成16进制:  hex( 数字) CPU.内存.硬盘我们看到都是采用的16进制计算. 一个字节(byte)能够用2个16进制的数来表示.4个2进制对应1个16进制. 编码: 所有的系统.编程语言都默认支持Unicode. UTF-8/GBK... --> decode 解码 --> Unicode Unicode --> encode 编码 --> GBK / UTF-8 .. 假设某Python文件是以UTF-8保存

任意多的整型参数返回最值

1 #定义一个方法 func,该func可以引入任意多的整型参数,结果返回其中最大与最小的值. 2 def func1(*nums): 3 for i in nums: 4 if not isinstance(i,int): 5 return '无法比较,请保证全部是整数!' 6 #要使函数执行到这里时结束,比较好用的方式是return 7 #函数执行到return就会结束 8 9 return max(nums),min(nums) 10 11 print(func1(1,35,5,6,'s'

将一个任意整数插入到已排列的整型数组中,插入后,数组中的数仍保持有序

实现代码: package homework; import java.util.Scanner; public class HomeWork { public static void main(String[] args) { //將输入的数字插入到一个有序的数组中的合适位置 Scanner input = new Scanner(System.in); System.out.println("请输入一个数字:"); int num = input.nextInt(); //有序的整

C# 10进制与62进制互转 数据大无压力 10进制与72,96进制任意转换

因项目需要把10进制的ID转换成62进制的字符串,分享给别人. 于是在网上搜索了很多算法,但都未能满足需要,项目里的ID是固定算法算出来的18~20位数据的ulong整型. 如:17223472272256398107,509488277152981097. 网上找的算法问题在于,将ulong的值转换62进制的字符串后,再将字符串转换成ulong值时会不准确. 于是各种测试与假象问题所在,最后确定算法确实没有问题,于是开始怀疑数据类型的问题. 果然,原因是使用了Math.Pow(double x

汇编语言-整型处理,利用堆栈原样输出

要求:输入任意一个整型数字字符串,并将整型原样输出. 这个子程序主要用于格式化排版,比output直接输出字符串有很大美观性. 1 ; Example assembly language program -- 2 ; Author: Karllne 3 ; Date: revised 05/2014 4 5 .386 6 .MODEL FLAT 7 8 ExitProcess PROTO NEAR32 stdcall, dwExitCode:DWORD 9 10 INCLUDE io.h ; h