标题:请教一个关于CRC16的问题
取消只看楼主
wxhpy
Rank: 1
来 自:南昌
等 级:新手上路
帖 子:3
专家分:0
注 册:2009-9-17
结帖率:100%
 问题点数:0 回复次数:0 
请教一个关于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,请问与用查表法得出的结果会一样吗?
搜索更多相关主题的帖子: message include 文章 信息 
2009-11-01 16:50



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-290676-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.874531 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved