下面我将为大家详细讲解 C# 中的进制转换实现,内容包括二进制、十六进制、十进制互转的方法。
前置知识
在进行进制转换之前,我们需要了解以下几个概念:
- 二进制:以 0、1 为基础的计数系统。
- 十进制:以 0-9 为基础的计数系统。
- 十六进制:以 0-9 和 A-F 为基础的计数系统。
- 进位:某一位达到基数时,进位到前一位并加 1。
- 借位:某一位借位时,向前一位借 1。
转换方法
十进制转二进制
将十进制数不断除以 2,直到商为 0,然后反向取余,即可得到二进制数。
public static string DecimalToBinary(int decimalNum)
{
string binaryStr = "";
while(decimalNum > 0)
{
binaryStr = (decimalNum % 2) + binaryStr;
decimalNum /= 2;
}
return binaryStr;
}
例如,将十进制数 10 转换为二进制数的过程如下:
10 / 2 = 5 余 0
5 / 2 = 2 余 1
2 / 2 = 1 余 0
1 / 2 = 0 余 1
所以,十进制数 10 转换为二进制数为 1010。
二进制转十进制
将二进制数从右到左依次乘以 2 的幂,幂的值从 0 开始递增,每次递增 1。将所有乘积相加,即可得到十进制数。
public static int BinaryToDecimal(string binaryStr)
{
int decimalNum = 0;
for(int i = binaryStr.Length - 1, j = 0; i >= 0; i--, j++)
{
if(binaryStr[i] == '1')
{
decimalNum += (int)Math.Pow(2, j);
}
}
return decimalNum;
}
例如,将二进制数 1010 转换为十进制数的过程如下:
1 * 2^3 = 8
0 * 2^2 = 0
1 * 2^1 = 2
0 * 2^0 = 0
所以,二进制数 1010 转换为十进制数为 10。
十进制转十六进制
将十进制数不断除以 16,直到商为 0,然后反向取余。对于余数为 10-15 的情况,用 A-F 表示。
public static string DecimalToHex(int decimalNum)
{
string hexStr = "";
while(decimalNum > 0)
{
int remainder = decimalNum % 16;
if(remainder >= 10)
{
hexStr = (char)('A' + remainder - 10) + hexStr;
}
else
{
hexStr = remainder + hexStr;
}
decimalNum /= 16;
}
return hexStr;
}
例如,将十进制数 255 转换为十六进制数的过程如下:
255 / 16 = 15 余 15(F)
15 / 16 = 0 余 15(F)
所以,十进制数 255 转换为十六进制数为 FF。
十六进制转十进制
将十六进制数从右到左依次乘以 16 的幂,幂的值从 0 开始递增,每次递增 1。对于 A-F,可以依次用 10-15 表示。将所有乘积相加,即可得到十进制数。
public static int HexToDecimal(string hexStr)
{
int decimalNum = 0;
for(int i = hexStr.Length - 1, j = 0; i >= 0; i--, j++)
{
int num = hexStr[i] >= 'A' && hexStr[i] <= 'F'
? hexStr[i] - 'A' + 10
: int.Parse(hexStr[i].ToString());
decimalNum += num * (int)Math.Pow(16, j);
}
return decimalNum;
}
例如,将十六进制数 FF 转换为十进制数的过程如下:
F * 16^0 = 15
F * 16^1 = 240
所以,十六进制数 FF 转换为十进制数为 255。
示例说明
示例一
在 C# 中,我们可以使用 Convert.ToString 方法将十进制数转换为二进制数,使用 Convert.ToInt32 方法将二进制数转换为十进制数。例如:
int decimalNum = 50;
string binaryStr = Convert.ToString(decimalNum, 2);
int newDecimalNum = Convert.ToInt32(binaryStr, 2);
Console.WriteLine($"十进制数 {decimalNum} 对应的二进制数为 {binaryStr}");
Console.WriteLine($"二进制数 {binaryStr} 对应的十进制数为 {newDecimalNum}");
输出结果为:
十进制数 50 对应的二进制数为 110010
二进制数 110010 对应的十进制数为 50
示例二
在 C# 中,我们可以使用 int.Parse 方法将十六进制字符串转换为十进制数,使用 Convert.ToString 方法将十进制数转换为十六进制字符串。例如:
int decimalNum = 255;
string hexStr = Convert.ToString(decimalNum, 16).ToUpper();
int newDecimalNum = int.Parse(hexStr, System.Globalization.NumberStyles.HexNumber);
Console.WriteLine($"十进制数 {decimalNum} 对应的十六进制数为 {hexStr}");
Console.WriteLine($"十六进制数 {hexStr} 对应的十进制数为 {newDecimalNum}");
输出结果为:
十进制数 255 对应的十六进制数为 FF
十六进制数 FF 对应的十进制数为 255
以上就是 C# 进制转换的实现攻略,希望能够对大家有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# 进制转换的实现(二进制、十六进制、十进制互转) - Python技术站