C# 十进制转任意进制

工作中开发条码生成程序,需求是生成如下结构的条码: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# 十进制转任意进制)