数据是12345 得到的校验位好像是2吧
接口文档中校验位一页如下:LRC calculation example
The following diagram demonstrates an LRC calculation (the data is '12345'):
bit        7 6 5 4   3 2 1 0<STX>      0 0 0 0   0 0 1 0        unusedLRC        0 0 0 0   0 0 0 0         seed
Byte 1     0 0 1 1   0 0 0 1          '1'
LRC        0 0 1 1   0 0 0 1
Byte 2     0 0 1 1   0 0 1 0          '2'    LRC        0 0 0 0   0 0 1 1
Byte3      0 0 1 1   0 0 1 1          '3'LRC        0 0 1 1   0 0 0 0
Byte4      0 0 1 1   0 1 0 0          '4'LRC        0 0 0 0   0 1 0 0
Byte5      0 0 1 1   0 1 0 1          '5'LRC        0 0 1 1   0 0 0 1
<ETX>      0 0 0 0   0 0 1 1
LRC        0 0 1 1   0 0 1 0       ‘2’ = transmitted LRC
<STX>12345<ETX>2
希望高手指点,万分感激!!!!!

解决方案 »

  1.   

    首先上面有5个byte,分别是:
    Byte 1     0 0 1 1   0 0 0 1          '1'Byte 2     0 0 1 1   0 0 1 0          '2'    
    Byte3      0 0 1 1   0 0 1 1          '3'
    Byte4      0 0 1 1   0 1 0 0          '4'
    Byte5      0 0 1 1   0 1 0 1          '5'这个你要先理解,1表示成16进制,就是0x31也就是0011 0001
      

  2.   

    然后这里种子是
    LRC        0 0 0 0   0 0 0 0         seed
    Byte 1     0 0 1 1   0 0 0 1          '1'
    LRC        0 0 1 1   0 0 0 1做二进制的或运行,得到新的LRC是 00110001
      

  3.   

    LRC        0 0 1 1   0 0 0 1
    Byte 2     0 0 1 1   0 0 1 0          '2'    LRC        0 0 0 0   0 0 1 1然后再将新的LRC
    0 0 1 1   0 0 0 1跟第二个数字字节码
    0 0 1 1   0 0 1 0 

    做同样的运算得到新的LRC,这样一直计算到最后一个数字,你明白了吧!
      

  4.   

    效验码是逐步和源数据异或的
    初始效验码是0
    第一步与'1'异或:
    LRC        0 0 0 0   0 0 0 0         seed 初始校验码
    Byte 1     0 0 1 1   0 0 0 1          '1' 算出校验码为
    LRC        0 0 1 1   0 0 0 1           
    然后与'2'异或:
    Byte 2     0 0 1 1   0 0 1 0          '2'   
    算出效验码为:
    LRC        0 0 0 0   0 0 1 1
    ....
    依次类推
      

  5.   

    完整版解释!
    <STX>      0 0 0 0   0 0 1 0        unusedLRC        0 0 0 0   0 0 0 0         seed          <==种子为0,
    Byte 1     0 0 1 1   0 0 0 1          '1'          <==第一个数字1 为 00110001
    LRC        0 0 1 1   0 0 0 1                       <==异或运算后得到LRC 为0011 0001
    Byte 2     0 0 1 1   0 0 1 0          '2'          <==第二个数字2 为 00110010
     
    LRC        0 0 0 0   0 0 1 1                       <==与上次生成的LRC做异或运算,得到新的LRC
    Byte3      0 0 1 1   0 0 1 1          '3'LRC        0 0 1 1   0 0 0 0
    Byte4      0 0 1 1   0 1 0 0          '4'LRC        0 0 0 0   0 1 0 0
    Byte5      0 0 1 1   0 1 0 1          '5'LRC        0 0 1 1   0 0 0 1
    <ETX>      0 0 0 0   0 0 1 1
    LRC        0 0 1 1   0 0 1 0       ‘2’ = transmitted LRC
      

  6.   


    byte[] bytes = Encoding.ASCII.GetBytes("12345\x3");   // <ETX> = \x3int checksum = 0;
    foreach (byte b in bytes)
    {
        checksum ^= b;                                     // <--
    }char checksumChar = (char)checksum;                    //  '2'
      

  7.   

    感谢gomoku,你的代码准确无误,我另一个帖子中的例子匀测试通过。请挪步,还有几个问题想问你
    http://topic.csdn.net/u/20100609/14/8766edfd-a580-4d4f-aada-3f6bb1c8de66.html?74884