gpt4 book ai didi

C# 将 byte[] 按十六进制值拆分为新的 byte[] 数组

转载 作者:行者123 更新时间:2023-11-30 14:07:50 25 4
gpt4 key购买 nike

我想从一个字节数组的 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);

关于C# 将 byte[] 按十六进制值拆分为新的 byte[] 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38020581/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com