![]() |
![]() |
| Paypal | 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 |
|