【发布时间】:2013-12-31 23:26:58
【问题描述】:
我正在尝试计算 2 字节的 CRC。 我有高位字节和低位字节的 CRC 值表。
static unsigned char auchCRCHi[] = {0x00, 0xC1, 0x81, 0x40, 0x01............0x40} ;
static char auchCRCLo[] = {0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03....0x40} ;
这些在下面的函数中用于计算CRC。
unsigned short CRC16(unsigned char* puchMsg, unsigned short usDataLen)
{
unsigned char uchCRCHi = 0xFF ; /* high byte of CRC initialized */
unsigned char uchCRCLo = 0xFF ; /* low byte of CRC initialized */
unsigned uIndex ; /* will index into CRC lookup table */
while (usDataLen--) /* pass through message buffer */
{
uIndex = uchCRCHi ^ *puchMsg++ ; /* calculate the CRC */
uchCRCHi = uchCRCLo ^ auchCRCHi[uIndex] ;
uchCRCLo = auchCRCLo[uIndex] ;
}
return (uchCRCHi << 8 | uchCRCLo) ;
}
在上述函数中,“puchMsg”是一个指向消息缓冲区的指针,其中包含 用于生成 CRC 的二进制数据,“usDataLen”是消息缓冲区中的字节数。
该函数将 CRC 作为 unsigned short 类型返回。
现在我必须在我的消息末尾附加这个 CRC 字节。
当我按以下方式发送数据时,没有 CRC
char str[6]={0x01,0x01,0x00,0x01,0x00,0x20};// sending hex of $$S??
serialObj.send(str, 6);
现在我必须计算 CRC 并将其附加到 str 的末尾,使其成为 8 个字节。
unsigned char str1[8] ={0x01,0x01,0x00,0x01,0x00, 0x20};
unsigned char* str2 = str1;
unsigned short test;
test= CRC16(str1,8);
这里的测试将包含返回的 CRC 作为 unsigned short。如何将其作为最后 2 个字节附加到 str1[8] 中。
【问题讨论】: