FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Ayuda conversión C++ a Delphi
Buenos días:
Tengo mi C++ un poco oxidado (vamos, como que no lo toco desde el 2000). El caso es que tengo que portar un par de funciones de C a Delphi para unos cálculos de CRC no estándares. Los códigos en cuestión son los siguientes: Código:
unsigned char crc8 (unsigned char *ptr, unsigned int length) { unsigned char crc; unsigned int i,n; unsigned int datum; unsigned char merker; crc = 0; for (i=0; i < (length); i++) { datum = *ptr++; crc ^= datum; for (n=0; n<8; n++) { if (crc & 1) merker = 1; else merker = 0; crc >>= 1; if (merker) crc ^= 0x92; } } return (crc); } Código:
unsigned int crc16 (unsigned char *ptr, unsigned int length) { unsigned int crc, datum; unsigned int i,n; unsigned char highbyte, lowbyte; unsigned char merker; crc = 0; for (i=0; i < (length/2); i++) { highbyte = *ptr++; lowbyte = *ptr++; datum = highbyte; datum <<= 8; datum |= lowbyte; crc ^= datum; for (n=0; n<16; n++) { merker = (crc & 1); crc >>= 1; if (merker) crc ^= 0x8408; } } return (crc); }
Lo que probablemente está mal de la función es el tema de los punteros de C, pero lo cierto es que no recuerdo cómo portarlos: Es decir: datum = *ptr++; (¿Tal vez con Addrs o Pointer?) Tampoco sé cómo portar sentencias como: merker = (crc & 1); o datum |= lowbyte Cualquier ayuda será bienvenida... |
#2
|
||||
|
||||
Hola DarkDudae.
Desconozco la funcionalidad del código, pero enviándole los mismos valores como argumentos, de este modo obtengo resultados idénticos en C++ Builder y Delphi:
Proba las funciones y me comentas. Saludos Edito: Donde dije "Desconozco la funcionalidad" quise decir que desconozco si el código original funciona, disculpas por la redacción
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... Última edición por ecfisa fecha: 28-11-2013 a las 19:07:48. |
#3
|
||||
|
||||
DarkDudae,
Cita:
Cita:
Nelson. |
#4
|
|||
|
|||
Cita:
Estaba a punto de armarme una DLL en C++ con las funciones expuestas para invocarlas desde Delphi como penúltimo recurso. @nlsgarcia: Gracias igualmente por responder. Lo cierto es que ya había visto todas esas funciones y he llegado a implementarlas en mi código. El problema es que las funciones no usan los polinomios "estándar". En concreto los polinomios son los siguientes: CRC-16 = X^14+X^12+X^5+1 CRC-8 = X^8+X^6+X^3+1 El caso es que pese a crearme mis propias funciones de CRC con base de esos algoritmos, me arrojaban valores distintos a los de las funciones originales de C++. (Incluso probé en varias calculadoras online que permiten la introducción del polinomio para asegurarme). Así pues, he de asumir que la documentación que me pasaron es incorrecta o está incompleta. Menos mal que ecfisa me ha sacado de mi pozo de ignorancia en C++. Nuevamente, gracias a ambos |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
ayuda con conversion de tipos:u_int64_t | davidj | Varios | 1 | 18-08-2008 01:47:55 |
Ayuda en conversión por favor ¡¡¡ | axlrafael | OOP | 5 | 17-07-2008 17:33:22 |
ayuda!!! conversion de qreport a pdf | chivix | Impresión | 0 | 02-03-2007 02:31:08 |
ayuda en conversión | Nelly | Varios | 2 | 09-10-2006 00:40:25 |
Ayuda con Conversion | RedVenom | Varios | 2 | 27-10-2003 01:17:29 |
|