返回介绍

1 C

2 C++

3 Windows

4 Linux

5 数据库

6 数据结构

7 算法

8 Qt

9 AS400

10 Web

12 C

13 框架

14 协议

15 工具

17 QA

12.3 C井任意进制的转换和逆转换

发布于 2023-10-02 20:38:16 字数 4376 浏览 0 评论 0 收藏 0

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();

        }
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文