C# 校验并转换 16 进制字符串到字节数组

Posted myzony

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# 校验并转换 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();
}

参考:StackOverFlow

后记

最近在忙自己的事情,vNext 系列的文章可能会在 10 号之后才能更新了。

以上是关于C# 校验并转换 16 进制字符串到字节数组的主要内容,如果未能解决你的问题,请参考以下文章

C# 字节数组各进制字符串数据互转

C# 和 Java 中的十六进制到字节数组给出不同的结果

将字节数组转换为十六进制字符串

从字节数组转换为字符串十六进制c# [重复]

BitBlt 转换为字节数组并从 c++ 解析为 c#

使用 C#,将包含二进制数据的字符串转换为字节数组的最有效方法是啥