Título: CRC16 Publicado por: TrashAmbishion en 15 Marzo 2023, 10:27 am Hola,
Si son tan amables de decirme como puedo pasar estos valores al siguiente código para ver que devuelve 06015653 CRC16.cpp Código
El CRC16.h Código
Estoy tratando de correrlo en https://www.onlinegdb.com/online_c++_compiler (https://www.onlinegdb.com/online_c++_compiler) Pero como no se C++ (prometo que aprenderé lo básico) necesito poder de momento echarlo andar. Se agradece cualquier ayuda de antemano. Saludos Título: Re: CRC16 Publicado por: K-YreX en 18 Marzo 2023, 01:17 am El código que pasaste no hace nada por si solo.
Eso es tan sólo una clase, es decir, un tipo de dato inventado que permite crear "variables" de ese tipo y cada variable tendrá: - su propio estado: la variable `crcval` - una serie de habilidades o cosas que sabe hacer: las funciones `init()`, `set()`, `value()` y `add()` Para ejecutar un programa en C++ necesitas de una función `main()` que es lo que realmente se ejecuta y ahí es donde tienes que usar estas otras partes auxiliares. Entiendo que lo que quieres hacer es algo como esto: Código
Problemas de todo esto: - El número `06015653` (en notación octal porque empieza por 0) equivale al número: 1579947 (en notación decimal) - La función `add()` recibe un argumento de tipo `unsigned short` cuyo rango de valores permitidos es: [0, 65535] - No puedes pasar ese número a la función porque no va a funcionar correctamente, deberías cambiar el parámetro de `unsigned short` a `int` para aumentar ese rango de valores permitidos Título: Re: CRC16 Publicado por: TrashAmbishion en 18 Marzo 2023, 01:21 am Hola,
Gracias por tu respuesta. El # es en expresión hexadecimal. Yo entiendo que se le pasan estos valores y me genera uno final que sería el CRC16. Saludos Título: Re: CRC16 Publicado por: K-YreX en 18 Marzo 2023, 20:34 pm No termino de entender qué expresión es hexadecimal.
El número que indicaste en el mensaje original es: 06015653 y ese número no es hexadecimal, es octal. Quiero entender que son varios números hexadecimales por separado lo que quieres pasar pero no puedo adivinar si quieres: - 0x06 + 0x01 + 0x56 + 0x53 - 0x0601 + 0x5653 - 0x06015653 <-- este espero que no porque ya te adelanto que también se pasa del rango permitido Título: Re: CRC16 Publicado por: TrashAmbishion en 19 Marzo 2023, 00:24 am Tienes razón mil disculpas, quiero pasar en hexadecimal a esa función
0x06 0x01 0x56 0x53 Para haga el cálculo y me entregué el CRC16 de esos números, creo que el a medida que lo calcula utiliza el resultado de cada 1, no lo tengo bien claro. Saludos Título: Re: CRC16 Publicado por: K-YreX en 19 Marzo 2023, 13:44 pm Sí, el resultado es dependiente de los valores anteriores.
Lo que tienes que hacer es lo mismo que ya te puse pero pasando varios valores antes de mostrar el resultado. Código
Para ejecutar esto en un compilador online como OnlineGDB (https://www.onlinegdb.com/) tienes que crear varios ficheros (en la parte de arriba a la izquierda del botón de "Run"). Cada fichero tiene que tener el nombre adecuado: "crc16.h", "crc16.cpp" y en el que pongas la función `main()` que por defecto se llamará "main.cpp" Copia el contenido correspondiente a cada fichero y con darle al botón de "Run" ya verás el resultado Título: Re: CRC16 Publicado por: TrashAmbishion en 19 Marzo 2023, 13:45 pm Excelente amigo, lo pruebo y te dejo saber.
Saludos Título: Re: CRC16 Publicado por: TrashAmbishion en 19 Marzo 2023, 15:25 pm Sí, el resultado es dependiente de los valores anteriores. Lo que tienes que hacer es lo mismo que ya te puse pero pasando varios valores antes de mostrar el resultado. Código
Para ejecutar esto en un compilador online como OnlineGDB (https://www.onlinegdb.com/) tienes que crear varios ficheros (en la parte de arriba a la izquierda del botón de "Run"). Cada fichero tiene que tener el nombre adecuado: "crc16.h", "crc16.cpp" y en el que pongas la función `main()` que por defecto se llamará "main.cpp" Copia el contenido correspondiente a cada fichero y con darle al botón de "Run" ya verás el resultado Muchísimas gracias, solucionado!!! Saludos Título: Re: CRC16 Publicado por: TrashAmbishion en 23 Marzo 2023, 22:52 pm Muchísimas gracias, solucionado!!! Saludos Hola compi, Me ha surgido algo curioso y es que el programa del proveedor que utiliza el CRC16 publicado aquí para los siguientes valores: Hex Dec 0x0B --> 11 0x01 --> 1 0x56 --> 86 0x50 --> 80 Genera una salida de C561 --> 50529 Y a mi 9A8B --> 39563 Me llama la atención que usa un número mayor que 9 donde ya cambia en hexadecimal pero no se si eso tiene algo que ver, incluso probé en ves de 11 17 que es B en hex y nada. Tendrás alguna idea de que puede ser? Saludos Título: Re: CRC16 Publicado por: K-YreX en 29 Marzo 2023, 21:39 pm Por un lado te preguntaría si estás 100% seguro de que el programa recibe los siguientes valores, en el orden indicado y ninguno más:
Código: 0x0B 0x01 0x56 0x50 Tanto si se le están pasando valores anteriores a esos como si el orden es diferente, el resultado también lo será.Y por otro lado: Citar Me llama la atención que usa un número mayor que 9 donde ya cambia en hexadecimal pero no se si eso tiene algo que ver, incluso probé en ves de 11 17 que es B en hex y nada. No entiendo qué fue lo que te resultó extraño aquí. La B en hexadecimal es un carácter válido y corresponde al 11 en decimal. No entiendo qué tiene ver el 17 en todo esto.Título: Re: CRC16 Publicado por: TrashAmbishion en 30 Marzo 2023, 09:22 am Por un lado te preguntaría si estás 100% seguro de que el programa recibe los siguientes valores, en el orden indicado y ninguno más: Código: 0x0B 0x01 0x56 0x50 Tanto si se le están pasando valores anteriores a esos como si el orden es diferente, el resultado también lo será.Y por otro lado: No entiendo qué fue lo que te resultó extraño aquí. La B en hexadecimal es un carácter válido y corresponde al 11 en decimal. No entiendo qué tiene ver el 17 en todo esto. Si puedes borrar mis mensajes anteriores y dejar tu respuesta nada más, sucedía exactamente lo que dices, parámetros incompletos, llevaba varios días en ello y tuve lapsus mental no entendía nada. Ya resuelto. Saludos |