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

任意进制转换(转化器,算法,类)

2016-12-08 15:53 465 查看


介绍

此类库支持2(二进制)到36之间任意进制的转换。

类库提供了一些常见的转换(如二进制到十进制),也支持高级的转换(如20进制到5进制)

快速使用:内置转换器

Convert.BinToDec.Convert()

Convert.BinToHex.Convert()

Convert.BinToOct.Convert()

Convert.DecToBin.Convert()

Convert.DecToHex.Convert()

允许所有的转换组合使用二进制、八进制、十进制和十六进制。例如:

//将 FFF(hex)转化为二进制
string binary = Converter.HexToBin.Convert("FFFF");

高级功能:自定义转化器


除了内置的静态转换器,您还可以自定义转换。例如:

// 将 FFFF (hex) 转化为5:
string base5 = Converter.Convert(NumberBases.Hexadecimal, 5, "FFFF");


主要代码:

/// <summary>
/// 常见的进制转换
/// </summary>
public enum NumberBases
{
Binary = 2,//二进制
Octal = 8,//八进制
Decimal = 10,//十进制
Hexadecimal = 16//十六进制
}

/// <summary>
/// 返回用于在指定的编号方案中使用的字符
/// </summary>
/// <param name="scheme"></param>
/// <returns></returns>
private static string  GetCharactersForNumberingScheme(NumberingSchemes scheme)
{
string characters;

switch(scheme)
{
case NumberingSchemes.AToZ:
characters = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ";
break;

case NumberingSchemes.ZeroToZ:
characters = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
break;

default:
throw new ArgumentOutOfRangeException("scheme");
}

return characters;
}

/// <summary>
/// 将指定的数转化为10进制
/// </summary>
/// <param name="value"></param>
/// <param name="fromBase"></param>
/// <param name="characters"></param>
/// <param name="maxFromSchemeCharacter"></param>
/// <returns></returns>
private static long ConvertToBase10(string value,int fromBase,string characters,int maxFromSchemeCharacter)
{
StringBuilder fromValue = new StringBuilder(value);

int power = 0;
long result = 0;

while(fromValue.Length>0)
{
int index = Array.IndexOf<char>(characters.ToCharArray(), fromValue[fromValue.Length - 1]);

if (index < 0)
throw new FormatException("Unsupported character in value string");

if (index >= maxFromSchemeCharacter)
throw new FormatException("Value contains character not valid for number base");

result += (index * (long)Math.Pow(fromBase, power));

//溢出检查
if (result < 0)
throw new OverflowException();

fromValue.Length--;

power++;
}
return result;
}

/// <summary>
/// 将指定的字符从10进制转化为指定的进制
/// </summary>
/// <param name="value"></param>
/// <param name="toBase"></param>
/// <param name="characters"></param>
/// <returns></returns>
private static string ConvertFromBase10(long value,int toBase,string characters)
{
StringBuilder builer = new StringBuilder();

while(value>0)
{
int remainder = (int)(value % toBase);

builer.Insert(0, characters[remainder]);

value /= toBase;
}

return builer.ToString();
}

完整代码下载:
点击打开链接


DEMO:

try
{
int fromBase = int.Parse(DropDownList1.SelectedValue);
int toBase = int.Parse(DropDownList2.SelectedValue);

TextBox3.Text = Converter.Convert(fromBase, toBase, TextBox2.Text);
}
catch (Exception ex)
{
TextBox3.Text = ex.Message;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C# 进制转换