|
本帖最后由 SUPER_CRJ 于 2019-11-21 11:26 编辑
现在正在做一个串口应用,把文本框中的数据提取出来,然后按照字节发送出去,之前使用的方法比较死板(遍历和判断),现在想升级方法,正好看到正则表达式可能满足要求,但是本人不是太明白!
已知:文件框中只会有:HEX格式字符和空格
但是会有下面组合(因为不好让客户按照:xx xx xx 来写)
例如:
1:标准格式:比如 01 23 45 67 08 ,这个时候按照顺序解析:0x01 0x23 0x45 0x67 0x08
2:没有空格,比如: 012345678
3:把0去掉的空格:1 23 45 67 8,
4:有的加空格,有的不加:1 234567 8,显然:其中的234567,要解析为:0x23 0x45 0x67
现在的问题是,在网卡搜索的正则匹配:
1:\b[\da-fA-F]{2} 只能解析其中长度为2的字符串。也就是:只能解析上述例子的2正确。
2:\b[0-9a-fA-F]+\b 会解析超出字节的范围,比如11A,我实际是想解析为:0x11 0xA,但是这个解析为:0x11A。
现在想的方法:要是能处理下字符串,把长度大于2的给截断。不过又回到死板的方法,要遍历和判断空格。
求教有没有好的方法!本人C#比较菜,正则表达式都是搜索的,不是很理解
附上当前解析的代码
- MatchCollection mc = Regex.Matches(txb_send.Text.ToString(), @"\b[0-9a-fA-F]+\b");
- List<byte> buf = new List<byte>();
- foreach(Match m in mc)
- {
- buf.Add( byte.Parse(m.Value,System.Globalization.NumberStyles.HexNumber) );
- }
- serialPort1.Write(buf.ToArray(), 0, buf.Count);
复制代码 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!
|