web-dev-qa-db-fra.com

Comment calculer la somme de contrôle

Je suis un pilote d'instrument en développement et je veux savoir comment calculer la checksum du cadre.

Explication:

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

  2. 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.

  3. 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].

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

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

quelqu'un peut-il fournir un code d'échantillon pour C #.

Aidez-moi, s'il vous plaît.

15
Rikin Patel

Enfin, j'ai une réponse, voici le code de calcul de la somme de contrôle:

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");
}
18
Rikin Patel

Vous pouvez le faire en une seule ligne:

return Encoding.ASCII.GetBytes(dataToCalculate).Aggregate((r, n) => r += n).ToString("X2");
0
Aleksey