[C con Clase] checksum

Sebastian Oldani sebastianoldani en gmail.com
Jue Mar 13 13:50:00 CET 2008


Hola, gracias por responder, tenian razon, se calcula asi. Me complique 
un poco al principio pero ahora lo entendi bien.
Sigo peliando con los puertos, en linux me anda un poco mejor la 
comunicacion aunque no pude programar nada todavia. Desde windows me 
baje comport de sourceforge para borland y lo instale y me anda 
relativamente bien, puedo enviar cadenas de caracteres sin problema. 
Tengo dos compus conectadas juntas y lo que envio de una lo recivo sin 
problema en la otra, el tema, es que no puedo mandar codigo hexa, cuando 
mando codigo hexa llega cualquier cosa, no se como hacer. Trato de 
mandar 0x30 0x00 0x00 0x08 ... una cadena de hexas de 16bytes y del otro 
lado me llega la mitad bien y la mitad mal. Quiza estoy usando la 
herramienta equivocada, con leer en hexa y escribir en hexa me sobra. 
Pero no se como hacerlo.....
Si alguien tiene alguna sugerencia por favor se lo agradesco.


Steven R. Davidson escribió:
> Hola Sebastián,
>
> Sebastian Oldani wrote:
>   
>> Hola, sigo peliando con los puertos, gracias a todos por responder, ya 
>> voy a ver si lo logro hacer funcionar. Sin embargo ahora tengo una duda 
>> muy importante, necesito calcular un checksum y no entiendo bien como 
>> hacerlo. en el manual dice cito textual:
>>
>> CHECKSUM
>> This value is calculated by summing the value of the first byte 
>> (Packet[0]) to the value of 573th byte (Packet[573]) and ‘mod’ by 
>> 256*256. This is to confirm the full packet be received correctly.
>>
>> Tengo que comprobarlo si o si asi al checksum, porque asi me lo da el 
>> dispositivo que tengo conectado a mi PC. El checksum es de 2 Byte. No 
>> entiendo bien como lo debo calcular. si alguien entiende que significa 
>> ese "mod" y como puedo obtener de eso 2 bytes. Gracias igual
>> Nos vemos.
>>
>>     
>
> "mod" hace alusión a la operación del módulo de una división; es decir, 
> el resto de una división. En C/C++, el operador % realiza esta operación.
>
> Me temo que el texto no está bien escrito. Descubrí la página que 
> contiene el PDF con la documentación de la cual sacaste este párrafo. El 
> enlace es: 
> ftp://www.ewt.com.tw/NewDownLoad/Chinese/Fingerprint%20Programmer%20Guide%20(WM-1xx).pdf
>
> Leyendo parte de la documentación, lo que intentan decir es que se suman 
> todos los valores desde el paquete 0 hasta el 574º como máximo. Esta 
> cantidad luego es operada por el módulo con 65536. Esto sería algo así:
>
> unsigned long nSuma = suma( paquete, N );
> unsigned short nChecksum = nSuma % 65536;
>
>
> Esto implica que obtendremos un valor entre 0 y 65535 (ambos incluidos) 
> como el resultado del "mod". Básicamente esto significa aceptar los 
> últimos 16 bits y descartar los demás. Por lo tanto, podríamos usar un 
> cásting a 'short int' y así obtener los últimos 16 bits. Por ejemplo,
>
> unsigned long nSuma = suma( paquete, N );
> unsigned short nChecksum = (unsigned short)nSuma;
>
> También podrías crear una máscara OR para "filtrar" los 16 bits que te 
> interesan. Por ejemplo,
>
> const unsigned long nMascara = 0x0000FFFF;
> unsigned long nSuma = suma( paquete, N );
> unsigned short nChecksum = nSuma | nMascara;
>
>
> Espero que esto te ayude.
>
> Steven
>
>
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>
>   

------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20080313/3a152d37/attachment.html>


Más información sobre la lista de distribución Cconclase