通讯协议包括头文件(Soh)  地址码(Addr)  数据块长(Len) 数据块(Data) 检验和(Checksum) 尾块(LF)
    其中Checksum为从Addr开始到数据快捷素所有字节之和(即字符的ASC码之和),取14位(最高2为丢弃),分高、低两个7bit字节,将bit8置1.低字节在前,高字节在后。
    例如 ,从Addr开始到数据块结束所有字节之和为32341(7E55H),则对其2 位最高位后为3E55H,氛围两个7字节7CH和55H,最高位置1后为FCH和D5H,所以检验和为D5H,FCH(低字节在前)。
    请问这个检验和的计算如何实现?

BYTE Data[8];
WORD wCheckSum;
BYTE b1,b2;

wCheckSum = 0;
for ( int i = 0; i < 8; i++ )
{
    wCheckSum += Data[i];
}

wCheckSum &= 0×3FFF;                // 去掉最高的两位

b1 = (BYTE)wCheckSum;            // 低字节
b1 &brvbar= 0×80;      // 将最高位置1

b2 = (BYTE)((wCheckSum >> 7);    // 高字节
b2 = &brvbar= 0×80;    // 将最高位置1

wCheckSum = ((WORD)b1) < < 8;
wCheckSum &brvbar= b2;                  // 最后的校验值

写的非常清楚,很是感谢。
我还想问下,发送到串口缓冲区的数据是十六进制的形式,我想吧接受到的数据在解析以前先在Memo控件里显示,请问这个格式应该怎么样转化呢?
谢谢!
答者必有分!