2012-06-08 17 views
12

Sto sviluppando il driver dello strumento e voglio sapere come calcolare il checksum del frame.Come calcolare il checksum

Spiegazione:

  1. Espressa da personaggi [0-9] e [A-F].

  2. I caratteri che iniziano dal carattere dopo [STX] e fino a [ETB] o [ETX] (compresi [ETB] o [ETX]) vengono aggiunti in binario.

  3. I numeri a 2 cifre, che rappresentano gli 8 bit meno significativi nel codice esadecimale , vengono convertiti in caratteri ASCII [0-9] e [A-F].

  4. La cifra più significativa è memorizzata in CHK1 e la meno significativa cifra in CHK2.

Non ricevo sopra 3 ° e 4 ° punto.

può fornire codice di esempio per C#.

Per favore aiutatemi.

+0

I m confusione in quello che è ans finali. è 4 cifre o 2 cifre. E non sto ottenendo quello che farò dopo la somma di tutti i byte. –

+0

questo è struttura del campione: 2Q | 1 | 2^1 |||| 20011001153000 e voglio sapere che cosa è il valore di chk1 e chk2 e io sono di nuovo in questo modo im totalmente vuoto su come calcolare il checksum. –

+0

Come abbiamo parlato in chat, abbiamo bisogno di sapere che tipo di algoritmo di checksum lo strumento si aspetta che tu usi. È un CRC, Fletcher o qualcos'altro? – Collin

risposta

12

Infine ho avuto risposta, ecco il codice per il checksum calcolo:

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

Pls, leggi Que. Voglio il valore di checksum della stringa data ma i tuoi ans. restituendo il valore booleano. –