2012-06-08 297 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

请阅读阙。我想要给定的字符串的校验和值,但你的答案。返回布尔值。 –