在C#中,可以使用多种方法进行进制转换。以下是一些常见的进制转换方法:
从十进制到其他进制:
使用 Convert 类
int decimalNumber = 123;
string binaryString = Convert.ToString(decimalNumber, 2); // 二进制表示
string octalString = Convert.ToString(decimalNumber, 8); // 八进制表示
string hexString = Convert.ToString(decimalNumber, 16); // 十六进制表示
使用 BitConverter 类
int decimalNumber = 123;
byte[] bytes = BitConverter.GetBytes(decimalNumber);
string binaryString = string.Join("", bytes.Select(b => Convert.ToString(b, 2)));
手动转换到二进制
int decimalNumber = 123;
string binaryString = "";
while (decimalNumber > 0)
{
binaryString = (decimalNumber % 2) + binaryString;
decimalNumber /= 2;
}
手动转换到八进制
int decimalNumber = 123;
string octalString = "";
while (decimalNumber > 0)
{
octalString = (decimalNumber % 8) + octalString;
decimalNumber /= 8;
}
手动转换到十六进制
int decimalNumber = 123;
string hexString = "";
while (decimalNumber > 0)
{
int remainder = decimalNumber % 16;
if (remainder < 10)
{
hexString = remainder.ToString() + hexString;
}
else
{
hexString = ((char)(remainder - 10 + 'A')) + hexString;
}
decimalNumber /= 16;
}
从其他进制到十进制:
使用 Convert 类
string binaryString = "1111011";
int decimalNumber = Convert.ToInt32(binaryString, 2);
string octalString = "173";
decimalNumber = Convert.ToInt32(octalString, 8);
string hexString = "7B";
decimalNumber = Convert.ToInt32(hexString, 16);
使用 Parse 或 TryParse 方法
string binaryString = "1111011";
if (int.TryParse(binaryString, NumberStyles.Binary, CultureInfo.InvariantCulture, out int decimalNumber))
{
// 转换成功
}
string octalString = "173";
if (int.TryParse(octalString, NumberStyles.Octal, CultureInfo.InvariantCulture, out decimalNumber))
{
// 转换成功
}
string hexString = "7B";
if (int.TryParse(hexString, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out decimalNumber))
{
// 转换成功
}
手动转换从二进制到十进制
string binaryString = "1111011";
int decimalNumber = 0;
for (int i = 0; i < binaryString.Length; i++)
{
decimalNumber = decimalNumber * 2 + (binaryString[i] - '0');
}
手动转换从八进制到十进制
string octalString = "173";
int decimalNumber = 0;
for (int i = 0; i < octalString.Length; i++)
{
decimalNumber = decimalNumber * 8 + (octalString[i] - '0');
}
手动转换从十六进制到十进制
string hexString = "7B";
int decimalNumber = 0;
for (int i = 0; i < hexString.Length; i++)
{
char c = hexString[i];
if (c >= '0' && c <= '9')
{
decimalNumber = decimalNumber * 16 + (c - '0');
}
else if (c >= 'A' && c <= 'F')
{
decimalNumber = decimalNumber * 16 + (c - 'A' + 10);
}
else if (c >= 'a' && c <= 'f')
{
decimalNumber = decimalNumber * 16 + (c - 'a' + 10);
}
}
在进行进制转换时,需要确保输入字符串的格式正确,并且使用适当的方法来处理可能出现的转换错误。对于较大的数值或需要频繁转换的场景,建议使用标准库提供的方法,如 Convert 类,因为它们经过优化,使用起来更加安全和方便。