C# 中实现 10 进制与 16 进制互相转换的方法

半杯拿铁
半杯拿铁
发布时间:2026-10-15| 2人浏览过
原创

在软件开发过程中,经常需要在十进制(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# 基础算法的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。