当前位置:编程学习 > C#/ASP.NET >>

一个简单的问题,就是我把我难住了,求好心人帮忙

正在编写一支条码打印软件,遇到一段编码规则没思绪

00079:五位流水碼(規則:0~9 A~Z,不包括I , J,O,Q,共32進制)


求好心人给段实现的代码 --------------------编程问答-------------------- 00079 是5位的流水码  --------------------编程问答-------------------- 同没思绪。 --------------------编程问答-------------------- --------------------编程问答-------------------- 怎么没人回复 跪求啦 --------------------编程问答-------------------- 你是要十进制转32进制的代码,还是要将asc字符串转为条码的代码? --------------------编程问答-------------------- 十进制转32进制的代码, 5位流水码以32进制的形式输出    能告诉我实现5位流水码以32进制的形式输出就可以了 当然要排除I , J,O,Q,等字母 --------------------编程问答-------------------- 00001  00002---- 0000A ---0000Z  ---0001A  类似这样 --------------------编程问答-------------------- 流水码就是已32进制的形式输出并累加00001,00002,0000Z  这样的 --------------------编程问答-------------------- 先上个广告:专业条码标签打印软件 http://www.ync-tech.com/

serialText:就是你序列的内容 如:1234567890abcdefghi.....
value:是当前要转换的值。
就是把value用serialtext表示
具体使用,可参照E-Label中的序列号

        #region GetOtherSerialNo->获取不同进制的序列号
        /// <summary>
        /// 获取不同进制的序列号
        /// </summary>
        /// <param name="serialText">序列号序列</param>
        /// <param name="value">十进制数据</param>
        /// <param name="Level">要转换的进制</param>
        /// <returns>转换结果</returns>
        private static string GetOtherSerialNo(string serialText, int value)
        {
            StringBuilder serialSB = new StringBuilder();
            int Level = serialText.Length;

            int n = value;

            if (n == 0)
            {
                return serialText[0].ToString();
            }
            if (n == Level)
            {
                string temp = (n / Level).ToString();
                return serialText[int.Parse(temp.Substring(0, 1))].ToString().PadRight(temp.Length + 1, serialText[0]);
            }
            while (n != 0)
            {
                if (n % Level == 0)
                {
                    serialSB.Insert(0, serialText[0]);
                }
                else
                {
                    serialSB.Insert(0, serialText[n % Level]);

                }
                n /= Level;
            }
            return serialSB.ToString();
        }
        #endregion


--------------------编程问答--------------------

            char[] cs = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 
                            'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'K', 'L', 
                            'M', 'N', 'P', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };
            while (true)
            {
                string s = Console.ReadLine();
                int v1 = 0;
                if (!int.TryParse(s, out v1))
                {
                    Console.WriteLine("输入有误");
                    continue;
                }
                int m = 0;
                int vx = v1;
                while (vx / 32 != 0)
                {
                    vx = vx / 32;
                    m++;
                }
                string val1 = "";
                for (int i = m; i >= 0; i--)
                {
                    int x = v1 / (int)Math.Pow(32, i);
                    //if (x > 9)
                    //    val1 += (char)(55 + x);
                    //else
                    //    val1 += x;
                    val1 += cs[x];
                    v1 = v1 % (int)Math.Pow(32, i);
                }
                Console.WriteLine(val1);
            }
--------------------编程问答-------------------- 输出时用string.PadLeft补够0,上面的代码没补。 --------------------编程问答--------------------
引用 10 楼  的回复:
C# code

            char[] cs = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 
                            'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'K', 'L', 
                            'M', ……


太感谢了  我试试   --------------------编程问答-------------------- 还有没有 其他的写法呢 --------------------编程问答-------------------- 可以检测输入是否包含I,J,O,Q,检测到就提示
string 过滤内容 = "IJOQ";
                for (int 字符 = 0; 字符 < 过滤内容.Length; 字符++)
                {
                    if (内容.IndexOf(过滤内容.Substring(字符, 1)) >= 0) 提示=......;
                }
没涉及到的,只说方法。 --------------------编程问答--------------------
static void Main(string[] args)
        {
            int w5 = 0, w4 = 0, w3 = 0, w2 = 0;//分别表示 第5位,第4位,第3位,第2位
            char[] zf = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 
                            'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'K', 'L', 
                            'M', 'N', 'P', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };
            string s = "";//要输出的值
            while(w5<32)
            {
            for (int w1 = 0; w1 < 32; w1++) //w1代表第1位
            {
                s = zf[w5].ToString() + zf[w4].ToString() + zf[w3].ToString() + zf[w2].ToString() + zf[w1].ToString(); //赋值
                Console.WriteLine(s);
            }
                w2++;
                if (w2 == 32) //当达到32,将超出界限,这时把第三位加1,并且第二位重置0,依此类推
                {
                    w3++;
                    w2 = 0;
                }
                if (w3 == 32)
                {
                    w4++;
                    w3 = 0;
                }
                if (w4 == 32)
                {
                    w5++;
                    w4 = 0;
                }
            }

            Console.ReadKey();
        }


数值好大啊,比较笨的方法。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,