各位高手 0xE5,0x1E,0x03,0x00,0x00,
0x05,0x00,0x07,0x45,0x4D,
0x42,0x41,0x4C,0x4C,0x45,
0x00,0x00,0x2B,0x00,0x01,
0x33,0x01,0x00,0x10,0x00,
0x06,0x53,0x55,0x49,0x53,
0x53,0x45这组数的校验和 怎么是 0xB0  C# 的算法是什么在线等…………

解决方案 »

  1.   

    这里有个开源的代码,直接贴给你了,你自己带进去算,就可以算出来。
    根据你用的CRC的不同标准(CRC_CCITT, CRC16, CRC32)计算出的结果也是不一样的。你可以试一下看是那个标准。
    可以参看下面的C#代码
    http://www.codeproject.com/script/Articles/ViewDownloads.aspx?aid=5597
      

  2.   

    不知道 我就是在 找这个 算法 。发送一串 16进制 数据 到串口 最后一位是检验和 Checksum,协议的 描述为
    Checksum
     
        This represents an "OR exclusive" of all preceding bytes (identification, lenght and data bytes). 题目 的数据 是他们提供的 示例
    0xE5,                     //标志符
    0x00,0x1E,                //数据的长度 40
    0x03,0x00,0x00,0x05,0x00,
    0x07,0x45,0x4D,0x42,0x41,
    0x4C,0x4C,0x45,0x00,0x00,
    0x2B,0x00,0x01,0x33,0x01,
    0x00,0x10,0x00,0x06,0x53,
    0x55,0x49,0x53,0x53,0x45, //数据 (是40个长)
    0xb0                      //检验和0xb0是他给的示例的检验和。  这个 0xb0是怎么计算出来的啊。是超过0xFF后 取补码?
      

  3.   

    不是很清楚吗?"OR exclusive" of ...byte checksum = 0;
    foreach (byte b in bytes)
    {
        checksum ^= b;
    }
      

  4.   

    看错了,我还以为是CRC校验,你说的是累加和校验吗?
    给你参看的       //累加和校验【每字节相加(16进)取后末两位】
            public byte GetVerifyCodeByte(byte[] bytes)
            {            int result = 0;
                foreach (byte b in bytes)
                {
                    result += b;
                }
                return (byte)(result % 256);        }
      

  5.   

    OR exclusive 不是就是异或嘛!