2012-06-08 295 views
12

我正在開發儀器驅動程序,我想知道如何計算幀校驗和。如何計算校驗和

說明:

  1. 由字符[0-9]和[A-F]表達。

  2. 從[STX]之後的字符開始,直到[ETB]或 [ETX](包括[ETB]或[ETX])以二進制形式添加的字符。

  3. 代表 十六進制代碼中最低8位的2位數字被轉換爲ASCII字符[0-9]和[A-F]。

  4. 最重要的數字存儲在CHK1中,而最重要的數字存儲在CHK2中並且最不重要的 數字存儲在CHK2中。

我沒有得到上述第3和第4點。

任何一個都可以爲c#提供示例代碼。

請幫幫我。

+0

我M在什麼是最終ANS混亂。它是4位數字或2位數字,而且我沒有得到所有字節總和後我會做的事情。 –

+0

這是樣品架: 2Q | 1 | 2^1 |||| 20011001153000 ,我想知道什麼是CHK1和CHK2的價值,我在這個新的這樣的IM完全空白如何計算校驗和。 –

+0

就像我們在聊天中談到的那樣,我們需要知道儀器希望您使用什麼樣的校驗和算法。這是CRC,Fletcher還是別的? – Collin

回答

12

最後我得到了答案,這裏是計算校驗碼:

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

請閱讀闕。我想要給定的字符串的校驗和值,但你的答案。返回布爾值。 –