如何将字节数组转换为十六进制字符串,反之亦然?

如何将字节数组转换为十六进制字符串,反之亦然?

技术背景

在软件开发中,经常需要在字节数组和十六进制字符串之间进行转换。例如,在处理加密数据、哈希值或网络通信时,字节数组是常见的数据表示形式,而十六进制字符串则更易于人类阅读和调试。在.NET 开发中,有多种方法可以实现这两种数据类型之间的转换。

实现步骤

字节数组转十六进制字符串

  • .NET 5及以上版本:使用 Convert.ToHexString 方法。
1
2
var myBytes = new byte[100];
var myString = System.Convert.ToHexString(myBytes);
  • 旧版本.NET:可以使用 StringBuilderBitConverter 等方法。
1
2
3
4
5
6
7
public static string ByteArrayToString(byte[] ba)
{
StringBuilder hex = new StringBuilder(ba.Length * 2);
foreach (byte b in ba)
hex.AppendFormat("{0:x2}", b);
return hex.ToString();
}

十六进制字符串转字节数组

  • .NET 5及以上版本:使用 Convert.FromHexString 方法。
1
2
var myString = "E10B116E8530A340BCC7B3EAC208487B";
var myBytes = System.Convert.FromHexString(myString);
  • 旧版本.NET:可以使用 Convert.ToByteString.Substring 等方法。
1
2
3
4
5
6
7
8
public static byte[] StringToByteArray(String hex)
{
int NumberChars = hex.Length;
byte[] bytes = new byte[NumberChars / 2];
for (int i = 0; i < NumberChars; i += 2)
bytes[i / 2] = Convert.ToByte(hex.Substring(i, 2), 16);
return bytes;
}

核心代码

字节数组转十六进制字符串

1
2
3
4
5
6
7
8
9
10
11
12
// .NET 5及以上版本
var myBytes = new byte[100];
var myString = System.Convert.ToHexString(myBytes);

// 旧版本.NET
public static string ByteArrayToString(byte[] ba)
{
StringBuilder hex = new StringBuilder(ba.Length * 2);
foreach (byte b in ba)
hex.AppendFormat("{0:x2}", b);
return hex.ToString();
}

十六进制字符串转字节数组

1
2
3
4
5
6
7
8
9
10
11
12
13
// .NET 5及以上版本
var myString = "E10B116E8530A340BCC7B3EAC208487B";
var myBytes = System.Convert.FromHexString(myString);

// 旧版本.NET
public static byte[] StringToByteArray(String hex)
{
int NumberChars = hex.Length;
byte[] bytes = new byte[NumberChars / 2];
for (int i = 0; i < NumberChars; i += 2)
bytes[i / 2] = Convert.ToByte(hex.Substring(i, 2), 16);
return bytes;
}

最佳实践

  • 性能优先:如果对性能有较高要求,推荐使用 .NET 5 及以上版本的 Convert.ToHexStringConvert.FromHexString 方法,它们是最快的实现方式。
  • 兼容性:如果需要兼容旧版本的 .NET,可以使用 StringBuilderBitConverter 等方法,但需要注意性能可能会有所下降。
  • 代码可读性:选择代码可读性高的实现方式,便于后续维护和扩展。

常见问题

  • 性能问题:某些实现方式可能会有性能瓶颈,特别是在处理大量数据时。可以通过性能测试来选择合适的实现方式。
  • 兼容性问题:不同版本的 .NET 可能支持不同的方法,需要根据实际情况选择合适的实现方式。
  • 大小写问题:十六进制字符串的大小写可能会影响转换结果,需要确保输入和输出的大小写一致。

如何将字节数组转换为十六进制字符串,反之亦然?
https://119291.xyz/posts/byte-array-hex-string-conversion/
作者
ww
发布于
2025年5月29日
许可协议