2012-06-08 3 views
12

Ich bin Entwickler Instrument Treiber und ich möchte wissen, wie Checksumme des Rahmens zu berechnen.So berechnen Sie die Prüfsumme

Erläuterung:

  1. durch Zeichen ausgedrückt [0-9] und [A-F].

  2. Zeichen beginnend mit dem Zeichen nach [STX] und bis [ETB] oder [ETX] (einschließlich [ETB] oder [ETX]) werden binär hinzugefügt.

  3. Die 2-stelligen Zahlen, die die niedrigstwertigen 8 Bits im Hexadezimalcode darstellen, werden in ASCII-Zeichen [0-9] und [A-F] konvertiert.

  4. Die höchstwertige Ziffer ist in CHK1 gespeichert und die niedrigstwertige Ziffer in CHK2.

i immer bin nicht über 3. und 4. Punkt.

kann jeder Beispielcode für C# bereitstellen.

Bitte helfen Sie mir.

+0

i m Verwirrung in dem, was endgültig ans ist. Es ist 4-stellig oder 2-stellig. Und ich bekomme nicht, was ich nach der Summe aller Bytes tun werde. diese –

+0

ist Probe Rahmen: 2Q | 1 | 2^1 |||| 20011001153000 und ich möchte wissen, was Wert von chk1 und chk2 ist und ich bin neu in diesem so im völlig leer darüber, wie Berechne Prüfsumme. –

+0

Wie wir im Chat gesprochen haben, müssen wir wissen, welche Art von Prüfsummenalgorithmus das Instrument von Ihnen erwartet. Ist es ein CRC, Fletcher oder etwas anderes? – Collin

Antwort

12

Schließlich bekam ich Antwort, hier der Code für die Berechnung der Prüfsumme ist:

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"); 
} 
-2
private bool CheckChecksum(string data) 
{ 
    bool isValid =false 

    byte[] byteToCalculate = Encoding.ASCII.GetBytes(dataToCalculate); 
    int checkSum = 0; 
    for (int i=i i<byteToCalculate.Length;i++) 
    { 
     checkSum += byteToCalculate[i]; 
    } 
    checksum &= 0xff; 

    if (checksum == byteToCalculate[ChecksumPlace] 
    { 
    return true 
    } 
    else 
    { 
    return false 
    } 
} 
+0

Bitte, lesen Sie Que. Ich möchte den Prüfsummenwert der angegebenen Zeichenfolge, aber Ihre ans. gibt den booleschen Wert zurück. –