Подход Linq (неэффективен из-за GroupBy
& Reverse
, но я предпочитаю Linq вне зависимости):
byte[] bytes = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 };
int chunkSize = 4;
var chunkedBytes = bytes.Select((x, i) => new { Index = i, Value = x })
.GroupBy(i => i.Index / chunkSize)
.Select(i => i.Select(j => j.Value))
.Reverse().ToList();
Использование устаревших циклов:
byte[] bytes = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 };
int chunkSize = 4;
var chunkedBytes = new List<byte[]>();
int offset = bytes.Length % chunkSize;
for (int i = bytes.Length - 1; i >= 0; i -= chunkSize)
{
byte[] tempBytes = new byte[i < chunkSize - 1 ? offset : chunkSize];
int index = 0;
for (int j = tempBytes.Length - 1; j >= 0; j--)
tempBytes[index++] = bytes[i - j];
chunkedBytes.Add(tempBytes);
}