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

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

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

    2024年02月15日
    浏览(37)
  • 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日
    浏览(56)
  • 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日
    浏览(47)
  • 最全的视频转换器工具清单,这18款免费视频格式转换器记得收藏

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

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

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

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

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

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

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

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

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

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

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

    2024年02月13日
    浏览(41)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包