C#将hex值的byte 拆分为byte 的新数组
我想从一个字节数组的IP数据包中获取数据并将其拆分为以0x47
开头的字节数组集合,即mpeg-2传输数据包。
例如,原始字节数组如下所示:
08 FF FF 47 FF FF FF 47 FF FF 47 FF 47 FF FF FF FF 47 FF FF
你如何在0x47
上拆分字节数组并保留分隔符0x47
,使它看起来像这样? 顺便说一下以特定hex开头的字节数组数组?
[0] 08 FF FF [1] 47 FF FF FF [2] 47 FF FF [3] 47 FF [4] 47 FF FF FF FF [5] 47 FF FF
您可以轻松实现所需的拆分器:
public static IEnumerable SplitByteArray(IEnumerable source, byte marker) { if (null == source) throw new ArgumentNullException("source"); List current = new List (); foreach (byte b in source) { if (b == marker) { if (current.Count > 0) yield return current.ToArray(); current.Clear(); } current.Add(b); } if (current.Count > 0) yield return current.ToArray(); }
并使用它:
String source = "08 FF FF 47 FF FF FF 47 FF FF 47 FF 47 FF FF FF FF 47 FF FF"; // the data Byte[] data = source .Split(' ') .Select(x => Convert.ToByte(x, 16)) .ToArray(); // splitted Byte[][] result = SplitByteArray(data, 0x47).ToArray(); // data splitted has been represented for testing String report = String.Join(Environment.NewLine, result.Select(line => String.Join(" ", line.Select(x => x.ToString("X2"))))); // 08 FF FF // 47 FF FF FF // 47 FF FF // 47 FF // 47 FF FF FF FF // 47 FF FF Console.Write(report);
可能的解决方案:
byte[] source = // ... string packet = String.Join(" ", source.Select(b => b.ToString("X2"))); // chunks is of type IEnumerable> var chunks = Regex.Split(packet, @"(?=47)") .Select(c => c.Split(new [] { ' ' }, StringSplitOptions.RemoveEmptyEntries) .Select(x => Convert.ToByte(x, 16)));
有几种方法可以做到这一点,最简单的方法是使用.Split()并替换正在拆分的值。
string[] values = packet.Split("47"); for(int i = 0; i < values.Length; i++) { Console.WriteLine("[{0}] 47 {1}", i, values[i]); // C# 6+ way: Console.WriteLine($"[{i}] 47 {values[i]}"); }
当然,你总是可以使用正则表达式,但我的正则表达式技能非常有限,我认为我不能亲自构造一个有效的正则表达式。
对你来说可能有点太讨厌,但应该工作得很好:
string ins = "08 FF FF 47 FF FF FF 47 FF FF 47 FF 47 FF FF FF FF 47 FF FF "; string[] splits = ins.Split(new string[] { "47" }, StringSplitOptions.None); for (int i = 0; i < splits.Length; i++) { splits[i] = "47 " + splits[i]; }
编辑:类似于我现在已经存在的答案。
上述就是C#学习教程:C#将hex值的byte 拆分为byte 的新数组分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注---计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1010702.html