[ Foro de C ]

Evaluacion C

15-Dec-2021 16:00
Fede Tea
1 Respuestas

Necesitamos procesar un conjunto de datos disponibles en un vector


unsigned char bytes[200]


(Tiene 200 bytes cómo máximo)


Contiene mensajes para procesar.


Cada mensaje comienza con # y finaliza con &

Luego de # tiene cuatro dígitos hexa

Los tres primeros son los bytes alto, medio y bajo de un número.

El cuarto es la verificación (xor) aplicada solo a los dígitos hexa.


char bytes[] = "#A00A&#F40B&#1302&"


A00 verificación A = 2560

F40 verificación B = 1111 xor 0100 xor 0000 = 3904

130 verificación 2 = 0001 xor 0011 xor 0000 = 304


Hacer una función que devuelva los valores de 12 bits (int) correctos (que verifique correctamente, que no termine antes de lo esperado, que no tenga dígitos inválidos)


err = darvalores(bytes, valores, &cant_validos);


Devuelve cantidad de errores (err) y los valores válidos guardados (cant_validos).


queda:    valores [2560, 3904, 304]


…….


Hacer otra función que reciba los valores y eliminé  los valores menores a min y  los mayores a max


err = filtrar (valores, min, max, &cant);


filtrar(valores, 400, 3500)


queda: valores [2560]


……..

Alguno sabe como resolverlo??


19-Dec-2021 21:53
Invitado (sancho)

hola fede

si no he entendido mal el array bytes son caracteres ascii,

lo primero en darvalores seria encontrar un '#'
luego comprobar si los tres dígitos son correctos
comprobar el dígito de control
comprobar el de final de dato '&'
si ha habido algún fallo marcar error
si no calcular el valor decimal  y contar como correcto
y seguir recorriendo el array hasta llegar al final '200'

la segunda función es más sencilla,
si esta entre los valores cuenta como correcta
si no cuenta en errores

suerte ;-)






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)