C# 校验并转换 16 进制字符串到字节数组
程序员文章站
2022-04-09 09:01:31
问题 最近在进行硬件上位机开发的时候,经常会遇到将 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 号之后才能更新了。
上一篇: 孔融让梨