加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读