問題 最近在進行硬體上位機開發的時候,經常會遇到將 16 進位字元串轉換為 的情況,除了這種需求以外,還需要判定一個字元串是否是有效的 16 進位數據。 解決 字元串轉 的情況可以使用 來解決,16 進位數據的判定則可以結合正則和長度來進行處理。 在這裡我是只接受以下兩種形式的 16 進位字元串,並 ...
問題
最近在進行硬體上位機開發的時候,經常會遇到將 16 進位字元串轉換為 byte[]
的情況,除了這種需求以外,還需要判定一個字元串是否是有效的 16 進位數據。
解決
字元串轉 byte[]
的情況可以使用 Convert.ToByte(string)
來解決,16 進位數據的判定則可以結合正則和長度來進行處理。
在這裡我是只接受以下兩種形式的 16 進位字元串,並對其進行驗證和轉換。
AA 12 34 56 78 06
AA-12-34-56-78-06
下麵就是代碼:
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();
}
後記
最近在忙自己的事情,vNext 系列的文章可能會在 10 號之後才能更新了。