一个简单的问题,就是我把我难住了,求好心人帮忙
正在编写一支条码打印软件,遇到一段编码规则没思绪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
--------------------编程问答--------------------
--------------------编程问答-------------------- 输出时用string.PadLeft补够0,上面的代码没补。 --------------------编程问答--------------------
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);
}
太感谢了 我试试 --------------------编程问答-------------------- 还有没有 其他的写法呢 --------------------编程问答-------------------- 可以检测输入是否包含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#