C# 中实现 10 进制与 16 进制互相转换的方法
在软件开发过程中,经常需要在十进制(Decimal)与十六进制(Hexadecimal)之间进行数值转换。本文将介绍两种在 C# 语言中实现这一功能的常见方法:一种基于 .NET Framework 内置方法的简洁方案,另一种是通过自定义逻辑手动实现的详细方案。
直接结果:使用 .NET 内置方法进行转换
这是最推荐且最常用的方式。C# 提供了强大的字符串格式化功能和类型转换工具,可以一行代码完成转换,无需编写复杂的循环或映射表。
第 1 步:十进制转十六进制
目的:将整数类型的十进制数转换为小写或大写的十六进制字符串表示。
操作:使用整数变量的 ToString 方法,传入格式说明符 "x"(小写)或 "X"(大写)。
代码示例:
int decimalValue = 446;
string hexString = decimalValue.ToString("x"); // 结果为 "1be"
// 若需大写,可使用 decimalValue.ToString("X");
第 2 步:十六进制字符串转回十进制
目的:将包含十六进制数字的字符串重新解析为十进制整数。
操作:使用静态方法 Convert.ToInt32(string, int),第二个参数指定基数为 16。
代码示例:
int hexStr = "1be";
int result = Convert.ToInt32(hexStr, 16); // 将 "1be" 解析为十进制 446
原理剖析:自定义手动转换逻辑
虽然内置方法非常便捷,但在某些特定场景下(如学习算法、避免依赖或处理非标准输入),了解其底层原理是有帮助的。以下实现展示了如何将一个十六进制字符串手动转换为整数,包括对前缀 “0x” 的清洗、字符合法性校验以及按位权值累加。
第 1 步:定义主入口与辅助函数
目的:创建一个可复用的 Main 方法来演示流程,并分离转换逻辑。
代码结构:
static void Main()
{
int i = 446;
// 十进制转十六进制
string hex = i.ToString("X"); // 输出 "1BE"
Console.WriteLine(hex);
// 十六进制转十进制
int j = HexToInt(hex);
Console.WriteLine(j);
}
第 2 步:实现十六进制转十进制的核心算法
目的:处理输入字符串,去除无效前缀,验证字符范围,并通过幂运算计算最终数值。
关键步骤:
1. 清理前缀:使用 Regex.Replace 移除可能存在的 "0x" 前缀,使其不区分大小写。
2. 合法性检查:使用正则表达式检查字符串是否包含除 0-9 和 A-F 之外的字符(如 g-z)。
3. 字符反转与映射:将字符串转为字符数组并反转,以便从低位(个位)开始遍历计算。
4. 累加计算:遍历每个字符,通过 HexMapping 获取其对应的 10 进制数值,乘以 16 的对应次方并累加。
完整辅助代码:
static int HexToInt(string hex)
{
// 移除可能的 "0x" 前缀
hex = Regex.Replace(hex, "^0x", "", RegexOptions.IgnoreCase);
// 如果包含非法十六进制字符 (g-z),抛出异常
if (Regex.IsMatch(hex, "[g-z]", RegexOptions.IgnoreCase))
{
throw new Exception("Invalid Hexadecimal Expression.: 0x" + hex);
}
char[] chars = hex.ToUpper().ToCharArray();
Array.Reverse(chars); // 反转数组,从最低位开始处理
int dec = 0;
for (int i = 0; i < chars.Length; i++)
{
dec += HexMapping(chars[i]) * (int)Math.Pow(16, i);
}
return dec;
}
static int HexMapping(char c)
{
switch (c)
{
case '0': return 0;
case '1': return 1;
case '2': return 2;
case '3': return 3;
case '4': return 4;
case '5': return 5;
case '6': return 6;
case '7': return 7;
case '8': return 8;
case '9': return 9;
case 'A': return 10;
case 'B': return 11;
case 'C': return 12;
case 'D': return 13;
case 'E': return 14;
case 'F': return 15;
default : throw new Exception("Invalid Hexadecimal Character :" + c.ToString());
}
}
总结
对于日常开发,建议直接使用 ToString("x") 和 Convert.ToInt32(str, 16),它们经过高度优化且不易出错。而手动转换的实现则有助于深入理解进制换算的数学原理,适合用于教学或特殊限制环境下的开发。以上就是 C# 十进制与十六进制转换的详细内容,更多关于 C# 基础算法的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













