最近在进行硬件上位机开发的时候,常常会遇到将 16 进制字符串转换为 byte[]
的状况,除了这种需求之外,还须要断定一个字符串是不是有效的 16 进制数据。code
字符串转 byte[]
的状况能够使用 Convert.ToByte(string)
来解决,16 进制数据的断定则能够结合正则和长度来进行处理。开发
在这里我是只接受如下两种形式的 16 进制字符串,并对其进行验证和转换。字符串
AA 12 34 56 78 06 AA-12-34-56-78-06
下面就是代码:get
public static byte[] HexStringToBytes(string hexStr) { // 处理干扰,例如空格和 '-' 符号。 var str = hexStr.Replace("-",string.Empty).Replace(" ", string.Empty); if (validStr.Length % 2 != 0) throw new ArgumentException("传入的 16 进制字符串长度不对。"); if (!new Regex(@"[A-Fa-f0-9]+$").IsMatch(hexStr)) throw new ArgumentException("传入的 16 进制字符串数据不符合规范。"); // 构建一个字符串长度的序列,每隔 2 个字符长度,即便用 Convert 构成一个字节。 return Enumerable.Range(0, str.Length) .Where(x => x % 2 == 0) .Select(x => Convert.ToByte(str.Substring(x, 2), 16)) .ToArray(); }
参考:StackOverFlowstring
最近在忙本身的事情,vNext 系列的文章可能会在 10 号以后才能更新了。io