Ho un buffer di lunghezza 256 che riceve sequenze di byte dal bluetooth. Il pacchetto effettivo che ho bisogno di estrarre è che inizia e finisce con il byte 126
. Voglio estrarre l'ultimo pacchetto nel buffer usando LINQ.Estrazione del pacchetto di dati dal buffer di byte
Quello che sto facendo ora è controllare l'ultimo indice di 126
e poi contare all'indietro fino a raggiungere un altro 126
. Ci sono anche alcuni problemi, ad esempio, due pacchetti adiacenti possono generare due byte di 126
uno accanto all'altro.
Ecco un esempio di tampone:
126 6 0 5 232 125 93 126 126 69 0 0 1 0 2 2 34 6 0 5 232 125 93 126 126 69 0 0 1 0 2 2 34 6 0 5 232 125 93 126 126 69 0 0 1 0 2 2 34 6 0 5 232 125 93 126 126 69 0 0
Così le informazioni che ho è:
- inizia a pacchetto e termina con il valore di byte di 126
- il byte successivo dopo l'indice di partenza ha un valore di 69
- il 3 ultimo byte a destra per il byte finale di 126 è un CRC dell'intero pacchetto che so come calcolare, quindi dopo aver estratto un pacchetto posso diamine questo CRC per vedere se ho il pacchetto giusto
Quindi alla fine voglio avere una matrice o un elenco che contenga il pacchetto corretto. per esempio:
126 69 0 0 1 0 2 2 34 6 0 5 232 125 93 126
Potete darmi un soloution veloce di estrarre questo pacchetto dal buffer?
Questo è ciò che I'v provato finora .... non riesce come posso davvero restituire il pacchetto corretto Cerco:
var data = ((byte[])msg.Obj).ToList(); //data is the buffer
byte del = 126; //delimeter or start/end byte
var lastIndex = data.LastIndexOf(del);
var startIndex = 0;
List<byte> tos = new List<byte>(); //a new list to store the result (packet)
//try to figure out start index
if(data[lastIndex - 1] != del)
{
for(int i = lastIndex; i > 0; i--)
{
if(data[i] == del)
{
startIndex = i;
}
}
//add the result in another list
for(int i = 0; i <= lastIndex - startIndex; i++)
{
tos.Add(data[i]);
}
string shit = string.Empty;
foreach (var b in tos)
shit += (int)b + ", ";
//print result in a textbox
AddTextToLogTextView(shit + "\r\n");
}
@KendallFrey I 'v ha aggiunto il mio approccio, non sembra proprio trovare il vero indice di inizio e fine di un pacchetto corretto :( –
Puoi spiegare la tua logica? – ehudt
Può esserci in questo buffer risultati parziali? Voglio dire che il byte di inizio viene inviato ma fino alla fine del buffer non c'è un marcatore finale perché fa parte di una risposta più ampia? In questo caso, qualsiasi soluzione presentata di seguito è comunque errata. –