美文网首页
C# 十进制转任意进制

C# 十进制转任意进制

作者: 三十又二 | 来源:发表于2020-04-26 14:24 被阅读0次

    工作中开发条码生成程序,需求是生成如下结构的条码:1S+料号+4位的数字和字母的组合(0-9,A-Z,去除I和O);
    便写了这个函数,通过修改可以生成任意位数的条码,本文以4位条码为例;
    原理:
    以10进制数字4365为例:
    数字长度位4:
    第1位数字为4,由4365/10^3(10的3次方),得4,余365;
    第2位数字为3,由余数365/10^2,得3,余65;
    第3位数字为6,由余数65/10^1,得6,余5;
    第4位数字为5,由余数5/10^0,得5,余0,计算完成;

    本函数可以修改为十进制转二进制,八进制,十六进制,转任意进制,可用于条码生成,生成指定长度条码。

    public string createNum(int num)//num为需要转换的十进制数
            {
                string[] source = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" };//以0到z为例子的34进制转换(26个字母去掉I和O)
                string[] code = new string[4] { "0", "0", "0", "0"};//转换成4位的编码,前面补0
                int yushu = num;//设置余数为num
                for (int i = 0; i < code.Length; i++)
                {
                    int zheng = yushu / (int)Math.Pow(34, (code.Length - i - 1));//求第i位的数字(用yushu整除34的(code.length-i-1)次方)
                    yushu = yushu % (int)Math.Pow(34, (code.Length - i - 1));//保留上面的余数,作为下次循环的yushu
                    code[i] = source[zheng];//第i位的数字从source里面取出
                }
                string b = string.Empty;
                for (int i = 0; i < code.Length; i++)
                {
                    b = b + code[i];//将code的4位串联起来,生成一个字符串b
                }
                return b;//返回b
            }
    

    当执行createNum(35)的时候,返回结果为'0011';
    当执行createNum(360)的时候,返回结果为'00AL';

    有帮助到你的话,点个赞再走吧,谢谢!

    相关文章

      网友评论

          本文标题:C# 十进制转任意进制

          本文链接:https://www.haomeiwen.com/subject/aharwhtx.html