Estoy tratando con una aplicación de puerto COM y tenemos una estructura de paquetes de longitud variable definida que estoy hablando con un microcontrolador con . El paquete tiene delimitadores para los bytes de inicio y detención. El problema es que a veces el buffer de lectura puede contener caracteres extraños. Parece que siempre recibiré todo el paquete, solo un parloteo adicional antes/después de los datos reales. Así que tengo un búfer al que anexo datos cada vez que se reciben datos nuevos del puerto COM. ¿Cuál es la mejor manera de buscar en este búfer las posibles apariciones de mi paquete? Por ejemplo:Usando LINQ para buscar una matriz de bytes para todas las subcapas que se inician/detienen con cierto byte
Di mi paquete delimitador es 0xFF
y tengo una matriz como tales
{ 0x00, 0xFF, 0x02, 0xDA, 0xFF, 0x55, 0xFF, 0x04 }
¿Cómo puedo crear una función/LINQ DECLARACIÓN que devuelve todos los subconjuntos que empiezan y terminan con el delimitador (casi como un correlador deslizante con comodines)?
La muestra devolvería los siguientes matrices 3:
{0xFF, 0x02, 0xDA, 0xFF}, {0xFF, 0x55, 0xFF}, and
{0xFF, 0x02, 0xDA, 0xFF, 0x55, 0xFF}
me hubiera esperado que las matrices volvió a ser {} {0x00 0x02, 0xDA} y {} 0x55, pero aparte de eso, si esto representa el tamaño de la matriz real aproximado, y el delimitador es sólo una byte long, ¿por qué no ir por un simple bucle? Probablemente superará a linq. –
@Willem: Sí, estoy de acuerdo en todos los puntos. – Amy
@Willem van Rumpt: redacté el título de la pregunta con LINQ porque generalmente recibe visitas en SO, pero en la pregunta especifiqué "function/LINQ-statement" porque era consciente de la posibilidad muy real de que una solución LINQ elegante fuera más probablemente tome más tiempo que un ciclo. Estoy abierto a cualquiera, solo quiero que todo el que viene detrás de mí en un año sepa lo que hice además del paquete "// Decode aquí" en el código. –