zoukankan      html  css  js  c++  java
  • 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 号之后才能更新了。

  • 相关阅读:
    力拓题目 5-8-575,657,707,771
    力拓题目1-4-7,217,344,557
    解码,编码,文件的基本操作
    集合类型内置方法和拷贝浅拷贝深拷贝
    列表元祖字典内置方法
    数字类型内置方法
    字符串类型内置方法
    hdu2262 高斯消元
    hdu1757 构造矩阵
    poj1222 高斯消元
  • 原文地址:https://www.cnblogs.com/myzony/p/10810449.html
Copyright © 2011-2022 走看看