前言:有些时候对接仪器需要给仪器发送特定16进制数据,但是TCP数据一般都是以字符串转字节数组
byte[] msgBytes = Encoding.ASCII.GetBytes(msg);
这种不符合仪器得要求。
所以需要对16进制字符串进行转化成字节组数
// 将十六进制字符串转换为字节数组
public static byte[] HexStringToByteArray(string hexString)
{
if (!IsHexStringValid(hexString))
{
throw new ArgumentException("无效的十六进制字符串!", nameof(hexString));
}
return Enumerable.Range(0, hexString.Length / 2).Select(x => Convert.ToByte(hexString.Substring(x * 2, 2), 16)).ToArray();
}
// 验证十六进制字符串格式是否正确
private static bool IsHexStringValid(string hexString)
{
Regex regex = new Regex(@"^[A-Fa-f\d]+$");
return regex.Match(hexString).Success && hexString.Length % 2 == 0;
}