crc校验-请教下,crc检测问题? 我debug。还是不知道错误,o(︶︿︶)o 唉

问题描述

请教下,crc检测问题? 我debug。还是不知道错误,o(︶︿︶)o 唉

/************************************************

  • FUNCTION: *
  • 单字节的 crc验证 *
  • INPUT: *
  • R 余数 *
  • PARAMETER: *
  • POLY:生成多项式 *
  • MSB:最高位 *
  • crc:源信息码 *
  • crc_r:余数(crc码) *
    ************************************************/

#include
#define POLY 0xEDB88320
#define MSB 0x80000000

typedef unsigned long CRC32;
typedef unsigned char BYTE;

CRC32 crc_test(BYTE crc, int len);

int main(int argc, char **argv)
{

CRC32 result;
BYTE crc_num[] = {0x49,0x48,0x44,0x52,0x00,0x00,0x00,0xC8,0x00, 0x00,0x00,0x96,0x08,0x03,0x00,0x00, 0x00};
//printf("%dn", (int)crc_test(0xb3));
result = crc_test(crc_num, sizeof(crc_num));
printf("0x%xn", (int)result);

return 0;

}

CRC32 crc_test(BYTE *crc, int len)
{
int i, lens;
CRC32 crc_t = 0, current;

for (lens=0; lens<len; lens++)
{
    current = crc[lens] << 32;

    for (i=0; i<8; i++)
    {
        if ( (CRC32)(current ^ crc_t) < 0 )
        {
            crc_t = (crc_t<<1) ^ POLY;
        }
        else{
            crc_t <<= 1;
        }

        if ( (*crc) & i )
        {
            crc_t ^= POLY;
        } 

        current <<= 1;
    }
}
return crc;

}

由0x49,0x48,0x44,0x52,0x00,0x00,0x00,0xC8,0x00, 0x00,0x00,0x96,0x08,0x03,0x00,0x00, 0x00得出的
crc码,正确的应该是:AC 02 37 2B

我的计算 错啦 不过位数一样 求教!!~~

解决方案

/************************************************
FUNCTION:
单字节的 crc验证
INPUT:
R 余数
PARAMETER:
POLY:生成多项式
MSB:最高位
num:初始化为 信息码,之后是余数
************************************************/
#include
#define POLY 0x19u
#define MSB 0x80000000u
typedef unsigned int BYTE;

BYTE crc_test(BYTE num);

int main() {
printf("%un", crc_test(0xb3u));
return 0;
}

BYTE crc_test(BYTE num) {
num <<= 4;
while (num>POLY) {
//printf("n");
if (num & MSB) {
//printf("n");
num = (num<<1)^POLY;
} else {
num <<= 1;
}
}
return num;
}
/*crc 单字节检测*/

解决方案二:

计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构……

对学习编程者的忠告:
眼过千遍不如手过一遍!
书看千行不如手敲一行!
手敲千行不如单步一行!
单步源代码千行不如单步对应汇编一行!

VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。
对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。
(Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)

时间: 2024-11-02 01:18:48

crc校验-请教下,crc检测问题? 我debug。还是不知道错误,o(︶︿︶)o 唉的相关文章

VB下如何编写CRC校验程序

程序 随着计算机技术的不断发展,在现代工业中,利用微机进行数据通讯的工业控制应用得也越来越广泛.由于传输距离.现场状况等诸多可能出现的因素影响,计算机与受控设备之间的通讯数据常会发生无法预测的错误.为了防止错误所带来的影响,一般在通讯时采取数据校验的办法,而循环冗余码校验是最常用的校验方法之一. 一.循环冗余码校验原理 循环冗余码校验英文名称为Cyclical Redundancy Check,简称CRC.它是利用除法及余数的原理来作错误侦测(Error Detecting)的.实际应用时,发送

crc-linux内核驱动模块ko加载时如何绕过CRC校验的问题。

问题描述 linux内核驱动模块ko加载时如何绕过CRC校验的问题. 基于种种原因,本人编写了一个驱动ko文件,想在天机II的系统上insmod,由于没有天机II的源码,故而我只能在nubia的内核源码树中编译ko文件,所以编译出来的ko文件在天机上面加载存在CRC校验的问题(内核源码版本不匹配?). 现在模块加载时的ver_magic问题已经绕过,算是解决了,但是由于模块中还要用到不少内核导出函数,有些函数的CRC校验值可以在其他ko模块中找到,但也有很多找不到,所以加载不起来,很是头疼,现在

使用C语言实现CRC校验的方法_C 语言

CRC(Cyclic Redundancy Check)校验应用较为广泛,以前为了处理简单,在程序中大多数采用LRC(Longitudinal Redundancy Check)校验,LRC校验很好理解,编程实现简单.用了一天时间研究了CRC的C语言实现,理解和掌握了基本原理和C语言编程.结合自己的理解简单写下来. 1.CRC简介 CRC检验的基本思想是利用线性编码理论,在发送端根据要传送的k位二进制码序列,以一定的规则产生一个检验码r位(就是CRC码),附在信息后面,构成一个新的二进制码序列数

C#串口通讯CRC校验码计算类

来源:http://blog.csdn.net/kuzhuxuan/archive/2006/05/30/763300.aspx  using System; namespace BQ.Terminal.Gateway{ /// <summary> /// 消息CRC校验算法 /// </summary> public class CRC {  //private int key = 0x11021H;  public CRC()  {     }  public static i

CRC校验

1.循环校验码(CRC码):是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定. 2.生成CRC码的基本原理:任意一个由二进制位串组成的代码都可以和一个系数仅为'0'和'1'取值的多项式一一对应.例如:代码1010111对应的多项式为x6+x4+x2+x+1,而多项式为x5+x3+x2+x+1对应的代码101111. 3.CRC码集选择的原则:若设码字长度为N,信息字段为K位,校验字段为R位(N=K+R),则对于CRC码集中的任一码字,存在且仅存在一个R次多项式

用java实现-16位的CRC校验 ,把C实现的,用JAVA实现

问题描述 16位的CRC校验 ,把C实现的,用JAVA实现 //本部分的定义需要根据不同的编译器进行修改 //U8 U16 U32分别表示8位.16位.32位无符号数值 #define U8 unsigned char #define U16 unsigned short #define U32 unsigned int #endif //C文件部分 U16 Crc16CCITT_Table[16]={ /* CRC 16bit余式表 */ 0x0000, 0x1021, 0x2042, 0x3

crc校验 存入 文本一-求助,关于python的一段代码

问题描述 求助,关于python的一段代码 用python语言 如何将test1.txt中一串数字进行crc校验存入test2.txt中其中test1.txt 中数字为0B 01 00 00 00 0A 13 08 21 13 56 17test2.txt 中数字为0B 01 00 00 00 0A 13 08 21 13 56 17 7E 7F,由于没接触过,还请大神告知

crc校验-关于CRC校验的一道题,求助

问题描述 关于CRC校验的一道题,求助 G(x)那一串是什么意思? 解决方案 你可以理解为GX=10111=23 1010001=81 81%23=12=1100所以选择D 解决方案二: x4+x2+x+1 其实就是 1*x4+0*x3+1*x2+1*x1+1*x0 所以是10111

关于CRC校验的问题~求解释

问题描述 关于CRC校验的问题-求解释 如果生成多项式G(x)为11010010,以下4个CRC校验比特序列中只有哪个可能是正确的? A. 1101011001 B. 101011011 C. 11011011 D. 1011001 请详细解释,谢谢- 解决方案 恩,没有信息码,只能根据校验码的位数是G(X)的最高次幂的方式得出. 解决方案二: 应该是D吧...记得·校验码长度比生成长的少一位