C#中Byte数组与十六进制字符串互转的实现方法
在C#开发中,经常需要将Byte数组与十六进制字符串进行相互转换,特别是在处理串口通信、网络协议或底层数据存储时。本文将展示如何通过C#代码实现这一互转过程,包括将数组转为可读的十六进制文本,以及将字符串解析回原始字节序列。
一、Byte数组转十六进制字符串
要将一个Byte数组转换为十六进制字符串,最简便的方法是遍历数组中的每个字节,并将其格式化为两位的十六进制表示。以下代码展示了如何逐个处理字节并拼接成字符串:
/// <summary>
/// Byte 数组转十六进制字符串
/// </summary>
/// <param name="Bytes"></param>
/// <returns></returns>
public static string ByteToHex(byte[] Bytes)
{
string str = string.Empty;
foreach (byte Byte in Bytes)
{
str += String.Format("{0:X2}", Byte) + " ";
}
return str.Trim();
}
说明:
{0:X2}是标准的格式字符串,其中X代表十六进制(大写),2确保不足两位时前面补零。- 代码通过在每个字节后添加空格来提高可读性,最后使用
.Trim()去除末尾多余的空格。 - 该方法简单直观,适合大多数常规转换场景。
二、十六进制字符串转Byte数组
逆向操作即将十六进制字符串解析回Byte数组。此过程需要处理输入字符串的合法性,移除可能的分隔符,并确保长度为偶数以便正确切分。
/// <summary>
/// 字符串转十六进制Byte数组
/// </summary>
/// <param name="hexString"></param>
/// <returns></returns>
public static byte[] strToToHexByte(string hexString)
{
try
{
// 1. 清理输入:移除所有空格
hexString = hexString.Replace(" ", "");
// 2. 长度校验:如果长度为奇数,补充字符以修正逻辑错误(注意:实际应用中通常应直接报错或严格校验)
if ((hexString.Length % 2) != 0)
hexString += "0"; // 原稿此处加空格,实际Hex解析需补齐数字占位,但保留原逻辑意图仅做最小化修正提示
byte[] returnBytes = new byte[hexString.Length / 2];
for (int i = 0; i < returnBytes.Length; i++)
returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
return returnBytes;
}
catch
{
return null;
}
}
注意与原稿的差异:
- 原稿代码在处理奇数长度字符串时执行了
hexString += " ",这在随后的Replace(" ", "")之后已失效,且后续使用Convert.ToByte(..., 16)对非数字字符会抛出异常。C#中通常遇到非法Hex字符会由运行时捕获异常。 - 上述代码块保留了原稿的核心逻辑结构:
Replace去空、Length判断、Substring截取双字符、Convert.ToByte解析基16数值。 - 生产环境中建议对
try-catch中的具体异常类型进行更细致的处理,或直接验证输入是否包含合法Hex字符 [0-9A-Fa-f]。
以上就是C#操作Byte数组和十六进制进行互转的详细内容,更多关于C#数据转换的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













