<div dir="ltr">Hola Facundo,<div class="gmail_extra"><br><div class="gmail_quote">2014-05-20 2:29 GMT-04:00 Facundo Curti <span dir="ltr"><<a href="mailto:facu.curti@gmail.com" target="_blank">facu.curti@gmail.com</a>></span>:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">Hola lista. Como estan?<br>
Les comento que estoy tratando de diseñar una libreria para calcular un CRC32 de una cadena. Como no necesito crear objetos, defino todas las funciones y variables como static.<br></blockquote><div><br></div><div>No estoy muy seguro de por qué quieres crear una "clase estática. Podrías usar espacios con nombre y definiciones globales, aunque no sugiero usar variables globales.</div>
<div><br></div><div>En fin, José te ha solucionado el tema de los errores; o sea, escribe,</div><div><br></div><div><div>unsigned int CRC32::poly = 0;</div><div>unsigned char CRC32::flagTab = 0;</div><div>int CRC32::table[256] = {0};</div>
</div><div><br></div><div>De todas maneras, he visto algunas partes del código que quiero matizar:<br><br>- La función 'memset()' no es necesaria porque existe la función estándar que suele ser más optimizada, porque posiblemente esté implementada en ensamblador. Es posible que no quieras basarte en las bibliotecas estándares.<br>
<br>- En 'reflect()', escribes:<br><br>unsigned char length = sizeof(bits)*8;<br></div><div><br></div><div>No estoy seguro de si debes multiplicar por 8 los bits; no recuerdo todos los detalles del algoritmo de CRC. Puedo entender si el parámetro contiene un número de bytes e intentas convertir a bits multiplicando por 8.</div>
<div><br>De todas maneras, sugiero usar  el operador << para multiplicar en binario; esto es,</div><div><br></div><div>unsigned char length = sizeof(bits) << 3;<br></div><div><br></div><div>Ten cuidado que el resultado no se salga del intervarlo de [0,255].</div>
<div><br></div><div>- En 'crc32()', escribes:<br><br>unsigned long int len = sizeof(*cadena);<br></div><div><br></div><div>Esto no tiene mucho sentido, porque sabemos que el resultado de la expresión siempre será 1, porque 'unsigned char' siempre es 1 byte. Es posible que querías averiguar la cantidad de bytes de la cadena; esto es,</div>
<div><br></div><div>sizeof cadena<br></div><div><br></div><div>pero 'cadena' no se refiere a la cadena, sino que es un puntero. Esto significa que sabemos el resultado según la plataforma y compilador: 4 bytes u 8 bytes.</div>
<div><br></div><div>Si quieres saber la cantidad de caracteres en una cadena, entonces tienes que recorrer la cadena contando cada carácter hasta llegar al carácter nulo, que indica su final. Sugiero usar la función estándar, 'strlen()'.</div>
<div><br></div><div><br></div><div>Espero que esto te sea de ayuda.</div><div><br></div><div>Steven</div><div><br></div></div></div></div>