C#将十六进制值的byte []拆分为byte []的新数组
发布时间:2020-12-15 23:33:38 所属栏目:百科 来源:网络整理
导读:我想从一个字节数组的IP数据包中获取数据并将其拆分为以0x47开头的字节数组的集合,即 mpeg-2 transport packets. 例如,原始字节数组如下所示: 08 FF FF 47 FF FF FF 47 FF FF 47 FF 47 FF FF FF FF 47 FF FF 你如何在0x47上拆分字节数组并保留分隔符0x47,使
我想从一个字节数组的IP数据包中获取数据并将其拆分为以0x47开头的字节数组的集合,即
mpeg-2 transport packets.
例如,原始字节数组如下所示: 08 FF FF 47 FF FF FF 47 FF FF 47 FF 47 FF FF FF FF 47 FF FF 你如何在0x47上拆分字节数组并保留分隔符0x47,使它看起来像这样?顺序是一个以特定十六进制开头的字节数组数组? [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<Byte[]> SplitByteArray(IEnumerable<Byte> source,byte marker) { if (null == source) throw new ArgumentNullException("source"); List<byte> current = new List<byte>(); 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); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |