您的位置:首页 > 编程语言 > C#

[转]使用C#实现长整型向任意编码的转换和逆转换

2012-09-28 13:18 495 查看


usingSystem;

[code]usingSystem.Collections.Generic;
usingSystem.Linq;

usingSystem.Text;


namespaceConsoleApplication1

{


publicclassNumber

{

publicstringCharacters

{

get;

set;

}


publicintLength

{

get

{

if(Characters!=null)

returnCharacters.Length;

else

return0;

}


}


publicNumber()

{

Characters="0123456789";

}


publicNumber(stringcharacters)

{

Characters=characters;

}


///<summary>

///数字转换为指定的进制形式字符串

///</summary>

///<paramname="number"></param>

///<returns></returns>

publicstringToString(longnumber)

{

List<string>result=newList<string>();

longt=number;


while(t>0)

{

varmod=t%Length;

t=Math.Abs(t/Length);

varcharacter=Characters[Convert.ToInt32(mod)].ToString();

result.Insert(0,character);

}


returnstring.Join("",result.ToArray());

}


///<summary>

///指定字符串转换为指定进制的数字形式

///</summary>

///<paramname="str"></param>

///<returns></returns>

publiclongFromString(stringstr)

{

longresult=0;

intj=0;

foreach(varchinnewstring(str.ToCharArray().Reverse().ToArray()))

{

if(Characters.Contains(ch))

{

result+=Characters.IndexOf(ch)*((long)Math.Pow(Length,j));

j++;

}

}

returnresult;

}


}




classProgram

{

staticvoidPrint(longnumber,Numberadapter)

{

Console.WriteLine("输入数字:{0}",number);

Console.WriteLine("规则:{0}\t\t进制:{1}进制",adapter.Characters,adapter.Length);

varnumtostr=adapter.ToString(number);

Console.WriteLine("转换结果:{0}",numtostr);

varstrtonum=adapter.FromString(numtostr);

Console.WriteLine("逆向转换结果:{0}",strtonum);

Console.WriteLine();

Console.WriteLine("============无聊的分割线============");

Console.WriteLine();

}


staticvoidMain(string[]args)

{

//传统的2进制

Numbern1=newNumber("01");

//传统的8进制

Numbern2=newNumber("01234567");

//传统的16进制

Numbern3=newNumber("0123456789ABCDEF");

//自定义编码的N进制,这个可以用来做验证码?

Numbern4=newNumber("爹妈说名字太长躲在树后面会被部落发现");

//山寨一个短网址

Numbern5=newNumber("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ");


Print(65535,n1);

Print(65535,n2);

Print(65535,n3);

Print(65535,n4);

Print(165535,n5);


Console.ReadKey();


}

}

}

原文地址:
/article/5262060.html


[/code]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: