在C#开发的实际场景中,字节数组和十六进制字符串的转换是非常常见的操作,比如处理网络传输的二进制数据、解析文件的原始字节内容、输出加密算法生成的字节结果等。BitConverter是.NET框架中用于处理基础数据类型和字节数组转换的工具类,虽然它没有直接提供字节数组转十六进制的API,但可以通过组合其提供的方法实现转换需求。

BitConverter的核心能力说明
BitConverter类位于System命名空间下,主要作用是将基础数据类型(如int、double、bool等)转换为字节数组,或者将字节数组转换为基础数据类型。它的常用方法包括:
GetBytes:将指定类型的值转换为字节数组ToInt32、ToDouble等:将字节数组的指定部分转换为对应的基础类型ToString:将字节数组转换为其字符串表示形式,默认格式是每个字节用两个十六进制字符表示,中间用短横线分隔
使用BitConverter实现字节数组转十六进制
BitConverter的ToString方法可以直接将字节数组转换为十六进制字符串,不过默认输出会包含短横线分隔符,我们需要进一步处理去掉分隔符,得到标准的十六进制字符串。
基础转换实现
下面是使用BitConverter完成转换的基础示例代码:
using System;
class Program
{
static void Main()
{
// 定义测试用的字节数组
byte[] byteArray = { 0x12, 0xAB, 0x3C, 0xD4, 0x7F };
// 使用BitConverter将字节数组转换为字符串,默认格式为12-AB-3C-D4-7F
string rawHex = BitConverter.ToString(byteArray);
Console.WriteLine("原始转换结果:" + rawHex);
// 去掉短横线分隔符,得到标准十六进制字符串
string standardHex = rawHex.Replace("-", "");
Console.WriteLine("标准十六进制结果:" + standardHex);
// 如果需要小写十六进制,可以再调用ToLower方法
string lowerHex = standardHex.ToLower();
Console.WriteLine("小写十六进制结果:" + lowerHex);
}
}
封装为通用方法
为了方便重复使用,我们可以将转换逻辑封装为一个通用的方法:
using System;
public static class ByteArrayConverter
{
/// <summary>
/// 使用BitConverter将字节数组转换为十六进制字符串
/// </summary>
/// <param name="bytes">待转换的字节数组</param>
/// <param name="isLowerCase">是否输出小写十六进制,默认false</param>
/// <returns>转换后的十六进制字符串</returns>
public static string ByteArrayToHexWithBitConverter(byte[] bytes, bool isLowerCase = false)
{
if (bytes == null || bytes.Length == 0)
{
return string.Empty;
}
// 调用BitConverter的ToString方法得到带短横线的十六进制字符串
string rawHex = BitConverter.ToString(bytes);
// 去掉短横线
string result = rawHex.Replace("-", "");
// 根据参数决定是否转为小写
return isLowerCase ? result.ToLower() : result;
}
}
// 调用示例
class Test
{
static void Main()
{
byte[] testBytes = { 0x01, 0x02, 0x0A, 0xFF };
string hex = ByteArrayConverter.ByteArrayToHexWithBitConverter(testBytes);
Console.WriteLine(hex); // 输出01020AFF
string lowerHex = ByteArrayConverter.ByteArrayToHexWithBitConverter(testBytes, true);
Console.WriteLine(lowerHex); // 输出01020aff
}
}
转换注意事项
- BitConverter的
ToString方法输出的十六进制字符默认是大写形式,如果需要小写需要额外处理 - 转换空字节数组或者null时,需要做前置判断,避免抛出异常
- 如果字节数组长度非常大,这种替换分隔符的方式会产生新的字符串对象,对性能有一定影响,小数据量场景下完全适用
其他常见转换方式对比
除了使用BitConverter,还有两种常见的字节数组转十六进制的方式,我们可以根据不同场景选择:
| 转换方式 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| BitConverter+Replace | 代码简单,无需手动处理每个字节 | 会产生额外字符串对象,大数据量性能一般 | 小数据量、快速实现场景 |
| StringBuilder循环拼接 | 性能更好,可灵活控制格式 | 代码量稍多 | 大数据量、需要自定义格式场景 |
| Convert.ToHexString(.NET 5+) | 原生API,性能优秀,无需额外处理 | 仅支持.NET 5及以上版本 | 高版本.NET框架项目 |
总结
使用BitConverter实现字节数组转十六进制是非常简单的方式,核心就是利用BitConverter.ToString得到带分隔符的十六进制字符串,再去掉分隔符即可。如果是小数据量的转换场景,这种方式完全够用;如果是大数据量或者高版本.NET框架,也可以选择其他更优的实现方式。开发者可以根据项目实际的框架版本和性能需求选择合适的转换方案。
C#BitConverter字节数组十六进制修改时间:2026-06-15 18:12:16