web-dev-qa-db-fra.com

Comment calculer la somme de contrôle?

Je développe un pilote d'instrument et je veux savoir comment calculer la checke of cadre.

Explication:

Exprimé par des personnages [0-9] et [A-F].

Les caractères commençant par le caractère après [STX] et jusqu'à ce que [ETB] ou [ETX] (y compris [ETB] ou [ETX]) sont ajoutés en binaire.

Les numéros à 2 chiffres, qui représentent les 8 bits les moins importants en code hexadécimal, sont convertis en ASCII caractères [0-9] et [A-F].

Le chiffre le plus significatif est stocké dans CHK1 et le chiffre le moins important de CHK2.

Ceci est un exemple de cadre:

<STX>2Q|1|2^1||||20011001153000<CR><ETX><CHK1><CHK2><CR><LF>

et je veux savoir quelle est la valeur de chk1 et chk2 et je suis nouveau dans cela, donc je suis totalement vide sur la façon de calculer la checksum

Je ne reçois pas au-dessus du 3ème et 4ème point.

Quelqu'un peut-il fournir un exemple de code pour C #?

4
Rikin Patel

Finalement j'ai répondu.

Voici C # Code pour calculer le checksum.

private string CalculateChecksum(string dataToCalculate)
{
    byte[] byteToCalculate = Encoding.ASCII.GetBytes(dataToCalculate);

    int checksum = 0;

    foreach (byte chData in byteToCalculate)
    {
        checksum += chData;
    }

    checksum &= 0xff;

    return checksum.ToString("X2");
} 
1
Rikin Patel

Parlant en tant que quelqu'un qui a développé un protocole de communication de LIS entier du pilote série à des entités fortement dactylographiées pour une machine utilisée dans des centaines de laboratoires différents.

Je suis venu à beaucoup de conclusions (liste courte):

  1. Le SIG SPEC est des conneries (chaque fournisseur de LIS a sa propre implémentation qui diffère de toutes les autres) Chaque hôpital/laboratoire LIS diffère dans la manière dont la chaine est écrite.
  2. Le cadre "Checksum" n'est rien de plus qu'un calcul stupide qui est destiné à rendre les gens qui ont écrit la spécification se sentir mieux (ce n'est en aucun cas une bonne somme de contrôle que cela puisse être facilement surmonté)
  3. Quiconque a écrit la documentation "State Machine" pour la spécification LIS était un piratage. Comme il ne contient pas correctement d'un état ni de transition (il est préférable d'extrapoler votre propre machine à stat que d'essayer de donner un sens au dessin)

Cela étant dit:

http://www.hendricksongroup.com/code_003.cox

Est un exemple très simple de la façon de calculer une somme de contrôle pour un cadre LIS.

Si vous écrivez un pilote LIS, mon conseil vous conseille est d'obtenir de nombreux journaux du vendeur (afin que vous puissiez voir exactement la communication de la communication) que vous connectez et écrivez beaucoup de tests d'unités pour correspondre à ces journaux (que et etc. Si cela doit être pour plus d'un fournisseur de le rendre extrêmement flexible). Oh et ajoutez beaucoup de journalisation pour vous-même.

9
maxfridbe