C#底层库--任意进制转换器(可自定义顺序字符,2、4、8、16、18进制都支持)

这篇具有很好参考价值的文章主要介绍了C#底层库--任意进制转换器(可自定义顺序字符,2、4、8、16、18进制都支持)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

系列文章

C#底层库–RegexHelper正则表达式辅助类
本文链接:https://blog.csdn.net/youcheng_ge/article/details/109745286

C#底层库–程序日志记录类
本文链接:https://blog.csdn.net/youcheng_ge/article/details/124187709

C#底层库–排序算法帮助类
本文链接:https://blog.csdn.net/youcheng_ge/article/details/124495730

C#底层库–MySQL数据库访问操作辅助类(推荐阅读)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126886379

C#底层库–SQLBuilder脚本构建类(select、insert、update、in SQL语句自动生成)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/129179216

C#底层库–XML配置参数读写辅助类(推荐阅读)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/129175304

C#底层库–获取文件版本和MD5值
本文链接:https://blog.csdn.net/youcheng_ge/article/details/112513871

C#底层库–文件操作类(文件重命名、目录移动、字节流转换)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126887161

C#底层库–Excel数据读取类(可读加密表格)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126887445

C#底层库–随机数生成器
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126888812

C#底层库–CSV和DataTable相互转换
本文链接:https://blog.csdn.net/youcheng_ge/article/details/128804367

C#底层库–Image图片操作类
本文链接:https://blog.csdn.net/youcheng_ge/article/details/128805298

C#底层库–JSON使用教程_详细(序列化、反序列化、转DataTable)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/128805705

C#底层库–cookie使用教程
本文链接:https://blog.csdn.net/youcheng_ge/article/details/128816347

C#底层库–Session操作辅助类
本文链接:https://blog.csdn.net/youcheng_ge/article/details/128817096

C#底层库–Image图片操作类
本文链接:https://blog.csdn.net/youcheng_ge/article/details/128805298

C#底层库–图片增加水印辅助类
本文链接:https://blog.csdn.net/youcheng_ge/article/details/128817184

C#底层库–数据库类型与程序类型转换器
本文链接:https://blog.csdn.net/youcheng_ge/article/details/128817610

C#底层库–StringExtension字符串扩展类
本文链接:https://blog.csdn.net/youcheng_ge/article/details/129520428

C#底层库–万能进制转换器(自定义有序字符,支持任意进制)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/130444724

C#底层库–文件上传方法
本文链接:https://blog.csdn.net/youcheng_ge/article/details/128817487

C#底层库–网络通信帮助类HTTP
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126886697


前言

本专栏为【底层库】,主要介绍编程过程中 通用函数。我们将这些通用固化的源码,进行重写、封装、拓展,再进行单元测试、集成测试、beta测试,最终形成通用化模板,这里我们称为“底层库”。

作为研发人员的你,并不需要花大量时间,研究“底层库”的含义,及“底层库”的实现方法。你只需要几行调用代码,就可以解决项目上碰到的难题。而底层库使用方法,本专栏均有详细介绍,也有项目应用场景。

底层库已实现功能:MySQL脚本构建器、MySQL数据库访问操作、参数配置文件读写、加解密算法、日志记录、HTTP通信、Socket通信、API前后端交互、邮件发送、文件操作、配置参数存储、Excel导入导出、CSV和DataTable转换、压缩解压、自动编号、Session操作等。

本专栏会持续更新,不断优化【底层库】,大家有任何问题,可以私信我。本专栏之间关联性较强(我会使用到某些底层库,某些文章可能忽略介绍),如果您对本专栏感兴趣,欢迎关注,我将带你用最简洁的代码,实现最复杂的功能。

需求源自于工作,业务部门提出去除“0 和 O字符 ”,所以系统自带的进制转换方法,已经不再适用,我们需要自己开发底层库–自定义进制转换器,支持任意进制的转换。
C#底层库--任意进制转换器(可自定义顺序字符,2、4、8、16、18进制都支持)

C#底层库--任意进制转换器(可自定义顺序字符,2、4、8、16、18进制都支持)

一、底层库作用

用于顺序编号,复杂业务单据号生成,可以阅读《【C#】编号生成器(定义单号规则、固定字符、流水号、业务单号)》
C#底层库--任意进制转换器(可自定义顺序字符,2、4、8、16、18进制都支持)
作用:生成带顺序的编号,可以去除易混淆字符、不需要字符,比如说,数字0 和 字母O容易混淆,可以去除。计算机世界第一个数字从0开始,不符合人们习惯,可以去除0,从1开始计数。

二、底层库源码

创建数字转换类,ConvertNumber.cs,复制以下代码。

using System;
using System.Collections.Generic;
using System.Linq;

namespace DLQRLabel
{
    /// <summary>
    /// 自定义进制转换器,非系统Convert.ToString()方式
    /// 创建人:gyc
    /// 创建时间:2023-04-29
    /// 说明:用于顺序编号,业务单号可以阅读《【C#】编号生成器(定义单号规则、固定字符、流水号、业务单号)】》
    /// 本文只适用于 123456789 这类,支持16进制、32进制,支持跳过容易混淆的字符。
    /// 使用过程中发现错误,请联系作者修改 https://blog.csdn.net/youcheng_ge。
    /// </summary>
    public class ConvertNumber
    {
        /// <summary>
        /// 属性:字符编号
        /// </summary>
        public string Characters
        {
            get;
            set;
        }


        /// <summary>
        ///属性:字符长度
        /// </summary>
        public int Length
        {
            get
            {
                if (Characters != null)
                    return Characters.Length;
                else
                    return 0;
            }
        }


        /// <summary>
        /// 构造方法
        /// </summary>
        /// <param name="a_intDigit">进制位数(2进制、8进制、10进制、16进制、32进制)</param>
        public ConvertNumber(int a_intDigit)
        {
            switch (a_intDigit)
            {
                case 2:
                    Characters = "01";
                    break;

                case 8:
                    Characters = "01234567";
                    break;

                case 10:
                    Characters = "0123456789";
                    break;

                case 16:
                    Characters = "0123456789ABCDEF";
                    break;

                case 32:
                    Characters = "123456789ABCDEFGHJKLMNPQRSTVWXYZ";
                    break;

                default:
                    Characters = "0123456789";
                    break;
            }
        }


        /// <summary>
        /// 构造方法(根据字符长度,创建进制)
        /// </summary>
        /// <param name="characters">字符</param>
        public ConvertNumber(string characters)
        {
            Characters = characters;
        }



        /// <summary> 
        /// 数字序号转换为指定的进制形式字符串 
        /// </summary> 
        /// <param name="a_longNumber">数字序号</param> 
        /// <returns></returns> 
        public string ToString(long a_longNumber)
        {
            List<string> result = new List<string>();
            long t = a_longNumber;

            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="a_str">字符串</param>
        /// <returns></returns>
        public long FromString(string a_str)
        {
            long result = 0;
            int j = 0;
            //字符串按字符倒序分割
            foreach (var ch in a_str.ToCharArray().Reverse().ToArray())
            {
                if (Characters.Contains(ch))
                {
                    int index = Characters.IndexOf(ch); //所在位置
                    long baseNum = (long)Math.Pow(Length, j);//计算次方,进制*指数
                    result += index * baseNum;
                    j++;
                }
            }
            return result;
        }

    }
}


三、调用方法

3.1 指定字符串转换为指定进制的数字形式

ConvertNumber number = new ConvertNumber("123456789ABCDEFGHJKLMNPQRSTVWXYZ");
long l_intSN = number.FromString(l_strNo); //字符串转序号

3.2 数字序号转换为指定的进制形式字符串

ConvertNumber number = new ConvertNumber("123456789ABCDEFGHJKLMNPQRSTVWXYZ");
l_strNo = number.ToString(++l_intSN).PadLeft(4, '1');//序号+1 转字符串

四、项目样例

我这里从本地数据库,取得最大的编号,然后依次往后编号,确保生成的编号唯一,就是不重复。
界面元素:输入框–需要产生多少编号,按钮–执行编号生成,表格–数据展示。
C#底层库--任意进制转换器(可自定义顺序字符,2、4、8、16、18进制都支持)
C#底层库--任意进制转换器(可自定义顺序字符,2、4、8、16、18进制都支持)

五、资源链接

添加按钮代码如下,仅供大家参考,代码不完整。
使用的【底层库】,我已经封装在动态链接库 Geyc_Utils.dll 中。文章来源地址https://www.toymoban.com/news/detail-462492.html

private void BTN_Add_Click(object sender, EventArgs e)
        {
            try
            {
                if (string.IsNullOrEmpty(text_Num.Text))
                {
                    FrmTips.ShowTipsError(this, "请正确填写每批数量!");
                    return;
                }

                //清空数据
                richTextBox1.Clear();
                m_listMain.Clear();

                int l_intBatchNum = Convert.ToInt32(text_Num.Text);//每批数量

                ConvertNumber number = new ConvertNumber("123456789ABCDEFGHJKLMNPQRSTVWXYZ");

                string str_MAX = DBService.GetMaxNo();
                long l_intSN = 0;

                if (string.IsNullOrEmpty(str_MAX))
                {
                    str_MAX = "1111";
                }

                string l_strOutput = string.Empty;
                string l_strNo = str_MAX;
                l_intSN = number.FromString(l_strNo); //字符串转序号

                for (int i = 0; i < l_intBatchNum; i++)
                {
                    if (l_intSN == 0) //初始化为0;
                    {
                        l_strNo = "1111";
                        l_intSN = 1;
                    }
                    else
                    {
                        l_intSN = number.FromString(l_strNo); //字符串转序号
                        l_strNo = number.ToString(++l_intSN).PadLeft(4, '1');//序号+1 转字符串
                    }

                    PrintModel model = new PrintModel();
                    model.supply_no = text_supply.Text;
                    model.code_no = l_strNo;
                    model.date = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
                    m_listMain.Add(model);

                }

                for (int i = 0; i < m_listMain.Count; i++)
                {
                    l_strOutput = l_strOutput + m_listMain[i].supply_no + "\t" +
                                    m_listMain[i].code_no + "\t" +
                                    m_listMain[i].date + "\t" +
                                    "\n";
                }
                richTextBox1.AppendText(l_strOutput);

            }
            catch (Exception ex)
            {
                FrmTips.ShowTipsError(this, "程序出错:" + ex.Message);
            }
            finally
            {
                AppConfig.SetValue("batch_num", text_Num.Text.Trim());
                AppConfig.SetValue("supply_no", text_supply.Text.Trim());
            }
        }

到了这里,关于C#底层库--任意进制转换器(可自定义顺序字符,2、4、8、16、18进制都支持)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Spring5学习随笔-生命周期、自定义类型转换器、后置处理Bean

    Spring5学习随笔-生命周期、自定义类型转换器、后置处理Bean

    学习视频:【孙哥说Spring5:从设计模式到基本应用到应用级底层分析,一次深入浅出的Spring全探索。学不会Spring?只因你未遇见孙哥】 指的是一个对象创建、存活、消亡的一个完整过程 由Spring负责对象的创建、存活、销毁,了解生命周期,有利于我们使用好Spring为我们创建

    2024年02月05日
    浏览(13)
  • Spring MVC获取参数和自定义参数类型转换器及编码过滤器

    Spring MVC获取参数和自定义参数类型转换器及编码过滤器

    目录   一、使用Servlet原生对象获取参数 1.1 控制器方法 1.2 测试结果 二、自定义参数类型转换器 2.1 编写类型转换器类 2.2 注册类型转换器对象  2.3 测试结果  三、编码过滤器 3.1 JSP表单 3.2 控制器方法 3.3 配置过滤器 3.4 测试结果  往期专栏文章相关导读  1. Maven系列专

    2024年02月10日
    浏览(11)
  • 【SpringBoot笔记35】SpringBoot自定义Converter转换器和Formatter格式化器

    这篇文章,主要介绍SpringBoot如何自定义Converter转换器和Formatter格式化器。 目录 一、数据转换器Converter 1.1、自定义Converter转换器 1.2、配置自定义的Converter

    2024年02月15日
    浏览(12)
  • Spring boot之WEB 开发-静态资源访问--自定义转换器--处理JSON--内容协商

    Spring boot之WEB 开发-静态资源访问--自定义转换器--处理JSON--内容协商

    在线文档: https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.developing-web-applications 1. 只要静态资源放在类路径下: /static 、/public 、/resources 、/META-INF/resources可以被直接访问- 对应文件WebProperties.java 2. 常见静态资源:JS、CSS 、图片(.jpg .png .gif .bmp .svg)、字体

    2024年02月09日
    浏览(25)
  • 最全的视频转换器工具清单,这18款免费视频格式转换器记得收藏

    最全的视频转换器工具清单,这18款免费视频格式转换器记得收藏

    审查和比较具有功能和定价的最佳视频转换器软件。从这个顶级付费和免费在线视频转换器工具列表中选择,以快速轻松地转换任何视频: 什么是视频转换器? 视频转换工具允许您将视频从一种格式转换为另一种格式。第一个商业上成功的视频格式是 Quad,它于 1956 年推出。

    2023年04月08日
    浏览(46)
  • 在线PDF格式转换器推荐,小圆象PDF转换器满足您的办公需求

    在线PDF格式转换器推荐,小圆象PDF转换器满足您的办公需求

    作为上班族,我们都知道在办公应用中经常使用PDF文件。PDF具有较高的内容安全性,并且可以在多种设备上打开和浏览而不会出现格式混乱的问题。然而,PDF文件的一个短板是其不易编辑。通常情况下,我们需要将PDF文件转换为Word文档,以便提取其中的文字内容或进行格式编

    2024年02月11日
    浏览(45)
  • 【图像增强器和转换器】Winxvideo AIAI 驱动的视频/图像增强器和转换器软件。

    【图像增强器和转换器】Winxvideo AIAI 驱动的视频/图像增强器和转换器软件。

    Winxvideo AI,以前称为WinX HD Video Converter Deluxe,是一款利用尖端深度学习技术的高级软件工具包。它提供了一套全面的工具,用于放大、稳定、转换、压缩、录制和编辑 4K/8K/HDR 视频。 AI 驱动的功能通过全面的 GPU 加速确保影院级质量。 Winxvideo AI 提供了一套强大且易于使用的视

    2024年02月20日
    浏览(15)
  • 电源转换器类型

    1根据转换的形式分类,可分为: AC-AC(交流-交流)转换器:如交流电源变压器、变频器等。 AC-DC(交流-直流)转换器:整流器。 DC-DC(直流-直流)转换器。 DC-AC(直流-交流)转换器:逆变器。 2 根据转换的方法分类,可分为: 线性电源:使用工作在线性区的功率器件调整

    2024年02月08日
    浏览(12)
  • RabbitMQ消息转换器

    RabbitMQ消息转换器

    在SpringAMQP的发送方法中,发送消息和接受消息的类型都是Object,也就是说,我们可以发送任意对象类型的消息, SpringAMQP都会帮我们把发送的消息序列化为字节后再进行发送 。下面,我们可以演示一下: 假设我们现在有个User类,如下(切记一定要实现Serializable接口,才能被

    2024年02月05日
    浏览(51)
  • ip转换器哪个好用 ip地址切换器有哪些

    在互联网时代,IP转换器成为了实现高效工作的常见工具。而如今,市面上涌现出了众多的IP转换器软件,使得用户在选择时感到困惑。本文将介绍一种深度IP转换器软件,探讨其特点和优势,以及与其他软件相比的差异,帮助读者在众多产品中作出明智的选择。 强大的功能和

    2024年02月13日
    浏览(10)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包