C# Как извлечь байты из байтового массива? С известным начальным байтом
Мне нужно получить конкретные байты из байтового массива. Я знаю содержимое первого байта, который я хочу, и мне нужно x байтов после этого.
Например, у меня есть
byte [] readbuffer { 0, 1, 2, 0x55, 3, 4, 5, 6};
byte [] results = new byte[30];
и мне нужны 3 байта, которые появляются после "0x55"
byte results == {ox55aa, 3, 4, 5}
Я использую:
Array.copy(readbuffer, "need the index of 0x55" ,results, 0, 3);
Мне нужно найти индекс 0x55
PS: 0x55
находится в произвольном положении в массиве.
PS2: я забыл упомянуть, что я работаю в.Net Micro Framework.
(Извините за не кодовое описание, я очень новичок в программировании... и английском)
заранее спасибо
[Редактировать]x2
4 ответа
byte[] results = new byte[16];
int index = Array.IndexOf(readBuffer, (byte)0x55);
Array.Copy(readBuffer, index, results, 0, 16);
Спасибо вам всем.
Это мой код сейчас. это работает как я ожидаю:)
Это может быть достигнуто следующим образом:
byte[] bytes = new byte[] { 1, 2, 3, 4, 0x55, 6, 7, 8 };
byte[] newBytes = new byte[4];
Buffer.BlockCopy(bytes,Array.IndexOf(bytes,(byte)0x55), newBytes,0,4);
Я думаю, вам просто нужно найти во всем массиве конкретное значение и запомнить индекс, в котором вы его нашли...
int iIndex = 0;
for (; iIndex < valuearray.Length; iIndex++);
if (valuearray[iIndex] == searchedValue) break;
и с этого момента делать то, что вы хотите с найденным индексом.
PS возможно, есть небольшие синтаксические ошибки, так как я обычно использую C++.NET
byte[] bufferMain = new byte[16];
int indexStart = 3; // starting index of sub-array of bytes
int indexEnd = 8; // end index of sub-array of bytes
var bufferSub = new ReadOnlySpan<byte>(bufferMain, indexStart, indexEnd - indexStart).ToArray();