一、核心概念
| 术语 | 说明 |
|---|
| 16进制字符串 | 以空格分隔的字节文本表示,如"48 65 6C 6C 6F" |
| Byte数组 | 字节数据的二进制形式,如byte[] {72, 101, 108, 108, 111} |
| fromBase | 转换的进制基数,支持 2/8/10/16,默认16 |
| X2 格式 | 将字节格式化为两位大写16进制字符串 |
二、常用操作
操作列表
| 操作 | 方法 | 说明 |
|---|
| 字符串转字节数组 | HexStringToByte | 将空格分隔的16进制字符串转为byte[] |
| 字节数组转字符串 | ByteToHexString | 将byte[]转为空格分隔的16进制字符串 |
| 字符串分割 | Split(' ') | 按空格分割16进制字符串 |
| 进制转换 | Convert.ToByte | 以指定进制解析字符串为字节 |
| 格式化输出 | ToString("X2") | 将字节格式化为两位16进制 |
第一部分:String → Byte[](字符串转字节数组)
/// <summary> /// 把16进制字符串转换成字节数组 /// </summary> /// <param name="hexString">16进制的字符串,以空格分割,如 "48 65 6C"</param> /// <param name="fromBase">需要转换的进制,默认16</param> public static byte[] HexStringToByte(string hexString, int fromBase = 16) { // 按空格分割字符串:"48 65 6C" → ["48", "65", "6C"] string[] strs = hexString.Split(' '); byte[] result = new byte[strs.Length]; for (int i = 0; i < strs.Length; i++) { // 以fromBase为基底解析字符串,自动处理0x前缀 result[i] = Convert.ToByte("0X" + strs[i], fromBase); } return result; } // 使用示例 byte[] data = HexStringToByte("48 65 6C 6C 6F"); // → [72, 101, 108, 108, 111]
第二部分:Byte[] → String(字节数组转16进制字符串)
/// <summary> /// 把字节数组转换成16进制的字符串,以空格分割 /// </summary> /// <param name="data">字节数组</param> /// <returns>空格分隔的16进制字符串,如 "48 65 6C 6C 6F"</returns> public static string ByteToHexString(byte[] data) { string result = string.Empty; for (int i = 0; i < data.Length; i++) { // X2:两位大写16进制,不足两位前面补0 result += data[i].ToString("X2") + " "; } return result.Trim(); // 去掉末尾多余空格 } // 使用示例 string hex = ByteToHexString(new byte[] { 72, 101, 108, 108, 111 }); // → "48 65 6C 6C 6F"
第三部分:完整可直接使用的Helper类
using System; namespace SerialPortHelper { /// <summary> /// 16进制字符串与字节数组互转工具类 /// 适用于串口通讯、TCP/UDP数据传输、Modbus协议等场景 /// </summary> public static class HexByteConvert { /// <summary> /// 把16进制字符串转换成字节数组 /// </summary> /// <param name="hexString">16进制的字符串,以空格分割,如 "48 65 6C"</param> /// <param name="fromBase">需要转换的进制,默认16</param> /// <returns>字节数组</returns> public static byte[] HexStringToByte(string hexString, int fromBase = 16) { string[] strs = hexString.Split(' '); byte[] result = new byte[strs.Length]; for (int i = 0; i < strs.Length; i++) { result[i] = Convert.ToByte("0X" + strs[i], fromBase); } return result; } /// <summary> /// 把字节数组转换成16进制的字符串,以空格分割 /// </summary> /// <param name="data">字节数组</param> /// <returns>空格分隔的16进制字符串,如 "48 65 6C 6C 6F"</returns> public static string ByteToHexString(byte[] data) { string result = string.Empty; for (int i = 0; i < data.Length; i++) { result += data[i].ToString("X2") + " "; } return result.Trim(); } } }
最后更新:2025-04-28