C# 十六进制字符串转换为十进制

在 C# 中,将十六进制(Hexadecimal)字符串转换为十进制(Decimal)整数非常简单。以下是几种常见的方法:


方法 1: 使用 Convert.ToInt32

Convert.ToInt32 方法可以直接将十六进制字符串转换为十进制整数。

示例代码
csharp 复制代码
using System;

class Program
{
    static void Main()
    {
        string hexValue = "1A3"; // 十六进制字符串
        int decimalValue = Convert.ToInt32(hexValue, 16); // 转换为十进制
        Console.WriteLine($"十六进制 {hexValue} 转换为十进制是: {decimalValue}");
    }
}
输出
复制代码
十六进制 1A3 转换为十进制是: 419

方法 2: 使用 int.Parse 或 int.TryParse

int.Parse 或 int.TryParse 也可以将十六进制字符串转换为十进制整数,需要指定 NumberStyles.HexNumber。

示例代码
csharp 复制代码
using System;
using System.Globalization;

class Program
{
    static void Main()
    {
        string hexValue = "1A3"; // 十六进制字符串
        int decimalValue = int.Parse(hexValue, NumberStyles.HexNumber); // 转换为十进制
        Console.WriteLine($"十六进制 {hexValue} 转换为十进制是: {decimalValue}");
    }
}
输出
复制代码
十六进制 1A3 转换为十进制是: 419
使用 int.TryParse 处理异常

如果十六进制字符串可能无效,可以使用 int.TryParse 来避免异常:

csharp 复制代码
using System;
using System.Globalization;

class Program
{
    static void Main()
    {
        string hexValue = "1A3"; // 十六进制字符串
        if (int.TryParse(hexValue, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out int decimalValue))
        {
            Console.WriteLine($"十六进制 {hexValue} 转换为十进制是: {decimalValue}");
        }
        else
        {
            Console.WriteLine("无效的十六进制字符串");
        }
    }
}

方法 3: 手动转换

如果你希望手动实现十六进制到十进制的转换,可以使用以下算法:

示例代码
csharp 复制代码
using System;

class Program
{
    static void Main()
    {
        string hexValue = "1A3"; // 十六进制字符串
        int decimalValue = HexToDecimal(hexValue);
        Console.WriteLine($"十六进制 {hexValue} 转换为十进制是: {decimalValue}");
    }

    static int HexToDecimal(string hex)
    {
        int result = 0;
        for (int i = 0; i < hex.Length; i++)
        {
            char c = hex[i];
            int digit = c >= '0' && c <= '9' ? c - '0' :
                       c >= 'A' && c <= 'F' ? c - 'A' + 10 :
                       c >= 'a' && c <= 'f' ? c - 'a' + 10 : 0;
            result = result * 16 + digit;
        }
        return result;
    }
}
输出
复制代码
十六进制 1A3 转换为十进制是: 419

方法 4: 使用 BitConverter(适用于字节数组)

如果十六进制数据是以字节数组的形式存在,可以使用 BitConverter 将其转换为十进制。

示例代码
csharp 复制代码
using System;

class Program
{
    static void Main()
    {
        byte[] bytes = { 0x1A, 0x03 }; // 十六进制字节数组
        int decimalValue = BitConverter.ToInt16(bytes, 0); // 转换为十进制
        Console.WriteLine($"十六进制字节数组转换为十进制是: {decimalValue}");
    }
}
输出
复制代码
十六进制字节数组转换为十进制是: 6667

总结

  • 推荐方法 :使用 Convert.ToInt32 或 int.Parse,简单且高效。
  • 手动转换:适用于学习或特殊需求。
  • 字节数组 :如果数据是字节数组形式,可以使用 BitConverter。

根据你的需求选择合适的方法即可!

相关推荐
吃一碗粉只付一碗钱3 小时前
12-给SPA友好的401和403响应
c#·状态模式
中云DDoS CC防护蔡蔡4 小时前
DDOS和CC攻击谁更可怕
运维·服务器·经验分享·网络安全·ddos
Ruiery4 小时前
Linux 6.6内核内存管理深度解析(十六):mmap — 用户态“申请内存“的真相
linux·运维·服务器
第九序言T4 小时前
Python 数据处理进阶(十八)批量处理同结构文件:一个文件夹一次跑完
开发语言·python·自动化·pandas·数据处理
欧米欧4 小时前
Linux系统篇(七),环境变量的底层溯源,核心获取机制与安全应用
linux·运维·服务器
Ruiery4 小时前
Linux 6.6内核内存管理深度解析(十八):KASLR 内核地址空间随机化
linux·运维·服务器·安全
前端精髓5 小时前
调用大模型API
运维·服务器·microsoft
龙亘川5 小时前
构建城市公共安全数字底座:亘川智城智慧安防系统全维度解读
java·大数据·开发语言·人工智能·信息可视化
程序喵大人5 小时前
【C++入门】内存模型与资源管理 - 09 shared_ptr 和 weak_ptr 解决共享,也带来代价
开发语言·c++·资源管理·智能指针·内存模型
Raas1006 小时前
AI网关部署方案?从部署到上线全流程
java·开发语言·人工智能·gateway·ai网关·企业级ai网关·企业级ai产品