Chinaunix首页 | 论坛 | 博客
  • 博客访问: 393377
  • 博文数量: 82
  • 博客积分: 2085
  • 博客等级: 大尉
  • 技术积分: 808
  • 用 户 组: 普通用户
  • 注册时间: 2008-06-10 10:28
文章分类

全部博文(82)

文章存档

2014年(1)

2013年(4)

2012年(2)

2011年(3)

2010年(10)

2009年(36)

2008年(26)

我的朋友

分类: C/C++

2013-03-04 10:57:58

#include "stdio.h"

 


unsigned short crc16a(unsigned char *buf, int length)
{
 unsigned char crc_reg[16];
 unsigned char data[1024];
 unsigned short crc_ret;
 int i;
 int j;
 int n;
 unsigned char reg1;
 unsigned char reg2;
 unsigned char reg3;

 for(i=0;i<16;i++)
 {
  crc_reg[i]=0;
 }
 for(i=0; i  {
  n = i * 8;
  for(j=0; j<8; j++)
  {
   if((buf[i] & 0x80>>j))
    {
     data[n+j] = 1;
    }
    else
    {
     data[n+j] = 0;
    }
  }
 }
 
 for(i=0; i  {
  reg1 = data[i] ^ crc_reg[15];
  reg2 = reg1 ^ crc_reg[1];
  reg3 = reg1 ^ crc_reg[14];
  crc_reg[1] = crc_reg[0];
  for(j=14; j>=3; j--)
  {
   crc_reg[j] = crc_reg[j-1];
  }
  crc_reg[0] = reg1;
  crc_reg[2] = reg2;
  crc_reg[15] = reg3;
 }
 #if 1
 for(i=0;i<16;i++){
  printf("%x\t", crc_reg[i]);
 }
 #endif
 crc_ret = 0;
 for(i=15;i>=0;i--)
 {
  if(crc_reg[i]==0){
   crc_ret = crc_ret << 1;
  }
  else
   {
    crc_ret = crc_ret << 1 | 1;
   }
    
 }
 
 return crc_ret;
}

int main(int argc, char* argv[])
{
 unsigned char m_data[127];
 int i;
 unsigned short crc;
 for(i=0;i<125;i++)
 {
  m_data[i] = i;
 }
 m_data[125] = 0xe9;
 m_data[126] = 0xcf;
 crc = crc16a((unsigned char*)m_data, 125);
 printf("crc_ret = 0x%x\n",crc);
 return 0;
}

阅读(947) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~