最近在進行硬件上位機開發的時候,常常會遇到將 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