使用举例如下:[图片] //十进制转换
[图片] BaseConverter bc = new BaseConverter("0123456789".ToCharArray());
[图片] Console.WriteLine(bc.ToNumber("456789"));
[图片] Console.WriteLine(bc.ToString(756217));
[图片][图片] //没有4的九进制转换
[图片] bc = new BaseConverter("012356789".ToCharArray());
[图片] long val = bc.ToNumber("856789");
[图片] Console.WriteLine(val);
[图片] Console.WriteLine(bc.ToString(val));
[图片] [图片] //查看当前九进制下,两个号段之间有多少可用号
[图片] long v1 = bc.ToNumber("018512");
[图片] long v2 = bc.ToNumber("999999");
[图片] Console.WriteLine("还能有{0}张卡", v2 - v1);
[图片] [图片] //十六进制转换
[图片] BaseConverter bcchs = new BaseConverter("0123456789abcdef".ToCharArray());
[图片] Console.WriteLine(val);
[图片] Console.WriteLine(bcchs.ToString(0xefefef));
[图片] [图片] //下面看一下,都生成卡号从 3000000 开始的号,生成2000000 张
[图片][图片] [图片]{
[图片] //进制转换方法
[图片] BaseConverter bc = new BaseConverter("012356789".ToCharArray());
[图片] long dtBegin = DateTime.Now.Ticks;
[图片][图片] long min = bc.ToNumber("3000000");
[图片] long max = min + 2000000;
[图片][图片] for (long i = min; i < max; ++i)
[图片][图片] [图片]{
[图片] bc.ToString(i);
[图片] }
[图片][图片] long dtEnd = DateTime.Now.Ticks;
[图片] Console.WriteLine(dtEnd - dtBegin);
[图片] }
[图片] [图片][图片] [图片]{
[图片] //普通方法
[图片] long dtBegin = DateTime.Now.Ticks;
[图片] for (long i = 3000000, count = 0; count < 5000000; ++i)
[图片][图片] [图片]{
[图片] [图片] string val = i.ToString();
[图片] if (val.IndexOf('4') >= 0)
[图片] continue;
[图片][图片] ++count;
[图片] }
[图片][图片] long dtEnd = DateTime.Now.Ticks;
[图片] Console.WriteLine(dtEnd - dtBegin);
[图片] }
[图片][图片]
由于中间有 4000000 的循环,所以还是进制转换方法优. 嘿嘿