Vous recherchez une bibliothèque CRC fiable et fiable? J'ai essayé de lancer le mien à partir des algorithmes de wikipedia affichés mais j'ai lu d'autres sources que je dois prendre en compte d'autres choses comme la performance, l'endian, etc. Je ne pense pas avoir le temps d'explorer toutes les petites choses. Pouvez-vous recommander des bibliothèques? Aussi c'est .NETExiste-t-il des bibliothèques CRC gratuites couvrant un grand nombre d'algorithmes CRC?
2
A
Répondre
1
J'ai une réponse à une autre question où vous pouvez trouver information about the various types of CRCs.
Voici une solution CCITT CRC pilotée par table et rapide. Notez que la partie la moins significative du CRC est utilisée en premier (petit Endian).
/******************************************/
/* CRC table for polynomial 0xA001 CCITT */
/******************************************/
#define CRC16(crc,c) crc = (crc >> 8)^crctab[(crc^c) & 0xff]
const uint16 crctab[256] = {
0x0000, 0xc0c1, 0xc181, 0x0140, 0xc301, 0x03c0, 0x0280, 0xc241,
0xc601, 0x06c0, 0x0780, 0xc741, 0x0500, 0xc5c1, 0xc481, 0x0440,
0xcc01, 0x0cc0, 0x0d80, 0xcd41, 0x0f00, 0xcfc1, 0xce81, 0x0e40,
0x0a00, 0xcac1, 0xcb81, 0x0b40, 0xc901, 0x09c0, 0x0880, 0xc841,
0xd801, 0x18c0, 0x1980, 0xd941, 0x1b00, 0xdbc1, 0xda81, 0x1a40,
0x1e00, 0xdec1, 0xdf81, 0x1f40, 0xdd01, 0x1dc0, 0x1c80, 0xdc41,
0x1400, 0xd4c1, 0xd581, 0x1540, 0xd701, 0x17c0, 0x1680, 0xd641,
0xd201, 0x12c0, 0x1380, 0xd341, 0x1100, 0xd1c1, 0xd081, 0x1040,
0xf001, 0x30c0, 0x3180, 0xf141, 0x3300, 0xf3c1, 0xf281, 0x3240,
0x3600, 0xf6c1, 0xf781, 0x3740, 0xf501, 0x35c0, 0x3480, 0xf441,
0x3c00, 0xfcc1, 0xfd81, 0x3d40, 0xff01, 0x3fc0, 0x3e80, 0xfe41,
0xfa01, 0x3ac0, 0x3b80, 0xfb41, 0x3900, 0xf9c1, 0xf881, 0x3840,
0x2800, 0xe8c1, 0xe981, 0x2940, 0xeb01, 0x2bc0, 0x2a80, 0xea41,
0xee01, 0x2ec0, 0x2f80, 0xef41, 0x2d00, 0xedc1, 0xec81, 0x2c40,
0xe401, 0x24c0, 0x2580, 0xe541, 0x2700, 0xe7c1, 0xe681, 0x2640,
0x2200, 0xe2c1, 0xe381, 0x2340, 0xe101, 0x21c0, 0x2080, 0xe041,
0xa001, 0x60c0, 0x6180, 0xa141, 0x6300, 0xa3c1, 0xa281, 0x6240,
0x6600, 0xa6c1, 0xa781, 0x6740, 0xa501, 0x65c0, 0x6480, 0xa441,
0x6c00, 0xacc1, 0xad81, 0x6d40, 0xaf01, 0x6fc0, 0x6e80, 0xae41,
0xaa01, 0x6ac0, 0x6b80, 0xab41, 0x6900, 0xa9c1, 0xa881, 0x6840,
0x7800, 0xb8c1, 0xb981, 0x7940, 0xbb01, 0x7bc0, 0x7a80, 0xba41,
0xbe01, 0x7ec0, 0x7f80, 0xbf41, 0x7d00, 0xbdc1, 0xbc81, 0x7c40,
0xb401, 0x74c0, 0x7580, 0xb541, 0x7700, 0xb7c1, 0xb681, 0x7640,
0x7200, 0xb2c1, 0xb381, 0x7340, 0xb101, 0x71c0, 0x7080, 0xb041,
0x5000, 0x90c1, 0x9181, 0x5140, 0x9301, 0x53c0, 0x5280, 0x9241,
0x9601, 0x56c0, 0x5780, 0x9741, 0x5500, 0x95c1, 0x9481, 0x5440,
0x9c01, 0x5cc0, 0x5d80, 0x9d41, 0x5f00, 0x9fc1, 0x9e81, 0x5e40,
0x5a00, 0x9ac1, 0x9b81, 0x5b40, 0x9901, 0x59c0, 0x5880, 0x9841,
0x8801, 0x48c0, 0x4980, 0x8941, 0x4b00, 0x8bc1, 0x8a81, 0x4a40,
0x4e00, 0x8ec1, 0x8f81, 0x4f40, 0x8d01, 0x4dc0, 0x4c80, 0x8c41,
0x4400, 0x84c1, 0x8581, 0x4540, 0x8701, 0x47c0, 0x4680, 0x8641,
0x8201, 0x42c0, 0x4380, 0x8341, 0x4100, 0x81c1, 0x8081, 0x4040
};
//=========================================================================
// Description: Calculate a CRC on a buffer
// Parameters: buffer - address of buffer
// length - length of buffer
// Returns: CRC
//=========================================================================
uint16 crcCalculate(const unsigned char *buffer, unsigned int length)
{
uint16 Crc = 0;
for (; length; --length) {
CRC16(Crc, *buffer++);
}
return(Crc);
}
1
Il existe une bibliothèque CRC sur www.lammertbies.nl qui couvre de nombreux algorithmes; Je les utilise dans mon propre projet.
J'ai aussi un projet avec CRC 8 bits: http://protocoltool.svn.sourceforge.net/viewvc/protocoltool/src/ Get lib_crc.c, lib_crc.h, lib_crc8.c et lib_crc8.h. Ils sont écrits en C.
Questions connexes
- 1. sun.awt.image.PNGImageDecoder $ PNGException: corruption crc
- 2. Données/fichier Python Crc
- 3. désactiver crc sur StreamReader.Read
- 4. CRC rapide d'un dessin.Bitmap
- 5. Comment utiliser boost :: crc?
- 6. Contrôle CRC Runtime
- 7. algorithme crc difficile
- 8. Calcul CRC SourceSafe
- 9. Le CRC vérifie les fichiers
- 10. Distance de Hamming et CRC
- 11. Collisions attendues pour parfait 32bit crc
- 12. Détermination de l'algorithme CRC à partir de données + application CRC intégrée.
- 13. Qu'est-ce qu'un CRC en cours d'exécution?
- 14. Implémentation de CRC-CCITT (XModem) en javascript
- 15. Téléchargement de fichier ASP.Net avec contrôle CRC
- 16. CRC pour le format de fichier PNG
- 17. Implémentation du CRC-4 en C#
- 18. Fonction CRC. Conversion de C en C#
- 19. Comment calculer la somme de contrôle CRC dans Actionscript 3?
- 20. Où rechercher des bibliothèques C/C++ gratuites?
- 21. Quel est le but de la fonction en php crc
- 22. Comment calculer le CRC dans le protocole RFID
- 23. Comment calculer CRC 32 bits en Ruby sur rails?
- 24. Bibliothèques gratuites pour ajouter des icônes à des applications WinForm?
- 25. Le fait de renommer un fichier changera-t-il son CRC?
- 26. Lutter pour convertir CRC-16 0x8408 inversé de C à Java
- 27. besoin d'un peu plus d'aide à convertir une fonction CRC de VB.NET à C#
- 28. bignum trop grand pour convertir en erreur `long »
- 29. Existe-t-il un moyen simple d'utiliser des bibliothèques pour le hachage de tableaux de données?
- 30. J'ai besoin du code inversé CRC pour mon codage de somme de contrôle CRC64