crc校验码计算方法是啥?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了crc校验码计算方法是啥?相关的知识,希望对你有一定的参考价值。

1、循环校验码(CRC码):是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。

2、生成CRC码的基本原理:任意一个由二进制位串组成的代码都可以和一个系数仅为‘0’和‘1’取值的多项式一一对应。

例如:代码1010111对应的多项式为x6+x4+x2+x+1,而多项式为x5+x3+x2+x+1对应的代码101111。


扩展资料:

注意事项

是接受方和发送方的一个约定,也就是一个二进制数,在整个传输过程中,这个数始终保持不变。

在发送方,利用生成多项式对信息多项式做模2除生成校验码。在接收方利用生成多项式对收到的编码多项式做模2除检测和确定错误位置。

应满足以下条件:

1、生成多项式的最高位和最低位必须为1。

2、当被传送信息(CRC码)任何一位发生错误时,被生成多项式做除后应该使余数不为0。

3、不同位发生错误时,应该使余数不同。

4、对余数继续做除,应使余数循环。

参考技术A

已知信息位为1100,生成多项式G(x) = x3+x+1,求CRC码。

M(x) = 1100 M(x)*x3 = 1100000 G(x) = 1011

M(x)*x3 / G(x) = 1110 + 010 /1011 R(x) = 010

CRC码为: M(x)*x 3+R(x)=1100000+010 =1100010

其原理是:CRC码一般在k位信息位之后拼接r位校验位生成。编码步骤如下:

(1)将待编码的k位信息表示成多项式 M(x)。

(2)将 M(x)左移 r 位,得到 M(x)*xr 。

(3)用r+1位的生成多项式G(x)去除M(x)*xr 得到余数R(x)。

(4)将M(x)*xr 与R(x)作模2加,得到CRC码。

扩展资料:

CRC校验码计算详解:采用CRC进行差错检验,生成多项式为G(X)=X4+X+1,信息码字为10110,则计算出的CRC校验码是:A. 0000 B. 0100 C. 0010 D.1111

符号表示假定:多项式和多项式的系数排列均用相同的符号表示,如

G(X)= X4+X+1

G(X)=10011

已知条件如下:

原码字记做M(X),即:M(X) = 10110

生成多项式记做G(X),即:G(X) = 10011

G(X)的最高阶数记做r,此处r = 4

谁会crc16-ccitt的计算方法,用winform做的,谢谢啦。。。

要求crc16-ccitt初始值是0xFFFF,多项式是0x1021,验证方法:如输入十六进制的12,那么得到的校验码就是3DBA,如果不是这么多,那么就是错的了,请勿灌水,结果正确立马给分!

参考技术A

用boost的算不算?crc计算部分用C++写,调用boost库计算,编译成dll

C#那边直接调用C++的dll来算结果

压缩包包含winform的代码和C++的代码以及用VC2010编译出来供C#调用的dll

C#部分由VS2012做成,如果你打不开工程,请新建一个C#工程然后把原有代码文件全部删掉,把我的代码加进去,编译,dll拷到debug目录下,运行即可。

字符串"12"计算出来确实是3DBA,十六进制的12算出来不是3DBA

追问

这位兄弟,我用了一下,确实很好,感谢你的回答。当时我看错了发成了ascii码了,所以才得出3DBA,是我的问题。输入12,结果应该是D383的,既然你有dll,能不能把C#的源码给我,或者再麻烦编译一下,转成hex的,算成D383的,在此衷心感谢呀。

追答

网上找了一套纯C#实现的代码,套进来用了

 

 我自己实在是写不出来了……

本回答被提问者采纳

以上是关于crc校验码计算方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

CRC16校验码如何计算

谁会crc16-ccitt的计算方法,用winform做的,谢谢啦。。。

modbus RTU通信时,CRC验证码怎样计算?是不是有快捷简单的方法?麻烦举例一下(原理很难懂啊)

如何计算modbus-rtu的crc校验码

求助大神还都有哪些16位冗余校验计算方法,试过常见的几种CRC16都不对

工控常用LRC XOR累加和CRC校验工具校验码自动生成软件多计算方式