C# 校驗並轉換 16 進制字符串到字節數組

問題

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

相關文章
相關標籤/搜索