按一个字节的值拆分字节数组

本文关键字:字节 字节数 数组 拆分 一个 | 更新日期: 2023-09-27 18:25:20

我有一个字节数组,我想每值1个字节进行拆分。如字符串拆分

例如:如果我的字节数组有以下数据:0x00,0x0A,0x02,0x0A,0X03,0x0A

b_arr0[0] = 0x00;
b_arr0[1] = 0x0a;
b_arr1[0] = 0x02;
b_arr1[1] = 0x0a;
b_arr2[0] = 0x03;
b_arr2[1] = 0x0a;

按一个字节的值拆分字节数组

如果您想以类似于String.Split的方式使用某个字节作为分隔符来分割字节数组,您可以这样做:

public byte[][] Split(byte[] input, byte separator, bool ignoreEmptyEntries = false)
{
    var subArrays = new List<byte[]>();
    var start = 0;
    for (var i = 0; i <= input.Length; ++i)
    {
        if (input.Length == i || input[i] == separator)
        {
            if (i - start > 0 || ignoreEmptyEntries)
            {
                var destination = new byte[i - start];
                Array.Copy(input, start, destination, 0, i - start);
                subArrays.Add(destination);
            }
            start = i + 1;
        }
    }
    return subArrays.ToArray();
}

用法:

var bytes = new byte[]
{
    0x00,
    0x01,
    0xaa, // Split here.
    0x02,
    0x03,
    0xaa, // Split here.
    0x04,
    0x05
};
var splitted = Split(bytes, separator: 0xaa, ignoreEmptyEntries: true);

请注意,输出数组中不包括分隔符字节。

也许使用这个LINQ查询?

byte[][] b_arr1 = data
    .Select((b, ix) => new { Byte = b, Index = ix })
    .GroupBy(x => x.Index / 2, x => x.Byte)
    .Select(byteGroup => byteGroup.ToArray())
    .ToArray();