常见的进制方式,主要有二进制,八进制,十进制和十六进制,通用的转换方式是把非十进制的数据类型转换成十进制的,然后再转换成其他类型。
在.NET Framework中,System.Convert 类中提供了较为全面的各种类型、数值之间的转换功能。其中的两个方法可以轻松的实现各种进制的数值间的转换
一 、Convert 类中的转换方法
1、Convert.ToInt32(string value, int fromBase);
把不同进制数值的字符串转换为数字(十进制)
value 参数 要进行转换的数值字符串
fromBase参数 要转换成的进制格式,只能是2、8、10及16。
Convert.ToInt32(”100111101″, 2); //二进制数 100111101 转成十进制
Convert.ToInt32(”76″, 8); //八进数 76 制转成十进制
Convert.ToInt32(”FF”, 16); // 16进数 FF 制转换成十进制
2、Convert.ToString(int value, int toBase);
可以把一个数字(十进制)转换为不同进制数值的字符串格式,
value 参数 要进行转换的数字(十进制数)
toBase参数 要转换成的进制格式,只能是2、8、10及16。
Convert.ToString(69, 2); //十进制数 69 转二进制
Convert.ToString(69, 8); //十进制数 69 转八进制
Convert.ToString(69, 16);//十进制数 69 转十六进制
二 、一个各进制自由转换的方法
进制转换的入口函数:
/// <summary>
/// 进制转换
/// </summary>
/// <param name="input"></param>
/// <param name="fromType">原来的进制格式</param>
/// <param name="toType">要转换成的进制格式</param>
/// <returns></returns>
public string ConvertGenericBinary(string input, byte fromType, byte toType)
{
string output = input;
switch (fromType)
{
case 2:
output = ConvertGenericBinaryFromBinary(input,toType);
break;
case 8:
output = ConvertGenericBinaryFromOctal(input,toType);
break;
case 10:
output = ConvertGenericBinaryFromDecimal(input,toType);
break ;
case 16:
output = ConvertGenericBinaryFromHexadecimal(input,toType);
break;
default:
break;
}
return output;
}
进制转换的入口函数
从二进制转换到其他格式:
/// <summary>
/// 从二进制转换成其他进制
/// </summary>
/// <param name="input"></param>
/// <param name="toType"></param>
/// <returns></returns>
private string ConvertGenericBinaryFromBinary(string input, byte toType)
{
switch (toType)
{
case 8:
//先转换成十进制然后转八进制
input = Convert.ToString(Convert.ToInt32(input, 2), 8);
break;
case 10:
input = Convert.ToInt32(input, 2).ToString();
break;
case 16:
input = Convert.ToString(Convert.ToInt32(input, 2), 16);
break;
default:
break;
}
return input;
}
从二进制转换到其他格式
从八进制转换成其他格式:
/// <summary>
/// 从八进制转换成其他进制
/// </summary>
/// <param name="input"></param>
/// <param name="toType"></param>
/// <returns></returns>
private string ConvertGenericBinaryFromOctal(string input, byte toType)
{
switch (toType)
{
case 2:
input = Convert.ToString(Convert.ToInt32(input, 8), 2);
break;
case 10:
input = Convert.ToInt32(input, 8).ToString();
break;
case 16:
input = Convert.ToString(Convert.ToInt32(input, 8), 16);
break;
default:
break;
}
return input;
}
从八进制转换成其他格式
从十进制转换到其他格式:
/// <summary>
/// 从十进制转换成其他进制
/// </summary>
/// <param name="input"></param>
/// <param name="toType"></param>
/// <returns></returns>
private string ConvertGenericBinaryFromDecimal(string input, int toType)
{
string output = "";
int intInput = Convert.ToInt32(input);
switch (toType)
{
case 2:
output = Convert.ToString(intInput, 2);
break;
case 8:
output = Convert.ToString(intInput, 8);
break;
case 16:
output = Convert.ToString(intInput, 16);
break;
default:
output = input;
break;
}
return output;
}
从十进制转换到其他格式
从十六进制转换到其他格式:
/// <summary>
/// 从十六进制转换成其他进制
/// </summary>
/// <param name="input"></param>
/// <param name="toType"></param>
/// <returns></returns>
private string ConvertGenericBinaryFromHexadecimal(string input, int toType)
{
switch (toType)
{
case 2:
input = Convert.ToString(Convert.ToInt32(input, 16), 2);
break;
case 8:
input = Convert.ToString(Convert.ToInt32(input, 16), 8);
break;
case 10:
input = Convert.ToInt32(input, 16).ToString();
break;
default:
break;
}
return input;
}
从十六进制转换到其他格式
三、各进制数的运算
把各进制数转换成 十进制数进行计算,然后再转换成原类型。
举例一个二进制之间的加法:
/// <summary>
/// 二进制之间的加法
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <returns></returns>
public string AddBetweenBinary(string x, string y)
{
int intSum = Convert.ToInt32(x, 2) + Convert.ToInt32(y, 2);
return Convert.ToString(intSum,2) ;
}