请教一个关于CRC16的问题
初学crc16_ccitt,看了一些文章,觉得用查表法的效率高,整合了一些程序,想对信息 101进行CRC16,如下所示:#include <stdio.h>
void get_table(unsigned short *);
unsigned short do_crc(unsigned char *message, unsigned int len,unsigned short *crc16_ccitt_table);
void main()
{
unsigned short crc16_ccitt_table[256];
unsigned char message[]={'1','0','1'};
int i;
unsigned short crc_reg;
get_table(crc16_ccitt_table);//获得相应的256个字符表格
//printf("0x%x\n",crc16_ccitt_table[i]);
crc_reg=do_crc(message,3,crc16_ccitt_table);
printf("%d",crc_reg);
}//get_table(crc16_ccitt_table)这个函数是用来获得查找表数组的,已经验证没有问题,而其存放在crc16_ccitt_table[256]这个数组中
void get_table(unsigned short *crc16_table)
{ unsigned char index = 0;
unsigned short to_xor;
int i;
while (1)
{
to_xor = index;
for (i = 0; i < 8; i++)
{
if (to_xor & 0x0001)
to_xor = (to_xor >> 1) ^ 0x8408;
else
to_xor >>= 1;
}
crc16_table[index]=to_xor;
if (index == 255)
{
break;
}
else
{
index++;
}
}
}
unsigned short do_crc(unsigned char *message, unsigned int len,unsigned short *crc16_ccitt_table)
{
unsigned short crc_reg = 0;
while (len--)
crc_reg = (crc_reg >> 8) ^crc16_ccitt_table[(crc_reg ^ *message++) & 0xff];
return crc_reg;
} //这个是利用查表产生CRC的函数
我的疑问有两点:
(1)我的信息是 101 ,如何把它与参数中的 unsigned char *message,int len联系起来?
(2)我在用计算法得到101的crc16_ccitt的码为 0x50a5,请问与用查表法得出的结果会一样吗?