2009-12-02 12 views
3

J'ai cherché sur le net une mise en œuvre en C# de la vérification de redondance cyclique sur 4 bits (CRC-4-ITU) mais jusqu'à présent, j'ai échoué.Implémentation du CRC-4 en C#

Y a-t-il quelqu'un qui est capable de me donner une implémentation de référence du CRC-4-ITU? Préférentiellement avec le polynôme standard s'il y a un polynôme standard (j'ai lu la spécification pointed to by wikipedia comme spécification CRC4 sans trouver de définition du polynôme).

J'apprécierais aussi vraiment une sorte de suite de tests ou de données de test pour vérifier une implémentation CRC4.

Merci!

+3

Jesus Christ Google fait peur. Ceci est le 6ème résultat de Google pour "CRC-4-ITU" et il a été indexé 7 minutes après sa publication. –

+1

Google et SO ont une sorte d'arrangement. Il peut s'agir simplement du fichier SiteMap, et du fait que SO a un GoogleRank élevé, c'est donc plus important que MyLittleDorkySite.com. –

Répondre

2

L'article Cyclic Redundancy Check de Wikipédia dit que le polynôme est x^4 + x + 1. Il y a aussi une très bonne description de la façon dont la somme de contrôle est calculée.

Voici un algorithme pour CRC16. Je sais que ce n'est pas ce que vous avez demandé, mais il devrait être relativement simple de l'adapter pour 4 bits.

public ushort calculate(byte[] bytes) 
    { 
     int crc = 0xFFFF; // initial value 
     // loop, calculating CRC for each byte of the string 
     for (int byteIndex = 0; byteIndex < bytes.Length; byteIndex++) 
     { 
      ushort bit = 0x80; // initialize bit currently being tested 
      for (int bitIndex = 0; bitIndex < 8; bitIndex++) 
      { 
       bool xorFlag = ((crc & 0x8000) == 0x8000); 
       crc <<= 1; 
       if (((bytes[byteIndex] & bit)^(ushort)0xff) != (ushort)0xff) 
       { 
        crc = crc + 1; 
       } 
       if (xorFlag) 
       { 
        crc = crc^0x1021; 
       } 
       bit >>= 1; 
      } 
     } 
     return (ushort)crc; 
    } 

http://www.experts-exchange.com/Programming/Languages/C_Sharp/Q_24775723.html

En outre, il est ce guide pour checksums informatique:

http://www.ross.net/crc/download/crc_v3.txt

« Tout ce que vous vouliez savoir sur les algorithmes CRC, mais ont peur de demander de peur que des erreurs dans votre compréhension pourraient être détectées. "

+0

Cet outil génial génère du code C pour des polynômes arbitraires! (Vous voulez 10011) Devrait être facile à convertir en C#: https://ghsi.de/CRC/index.php –