c语言crc32,c语言crc32函数

dfnjsfkhak 5 0

大家好,今天小编关注到一个比较意思的话题,就是关于c语言CRC32的问题,于是小编就整理了3个相关介绍c语言crc32的解答,让我们一起看看吧。

  1. CRC校验的最底层原理是什么?
  2. crc32多项式是唯一的吗?
  3. linux为什么没有crc校验指令,包括crc16和32?

CRC校验的最底层原理什么

CRC最基础运算就是移位运算和异或运算。

由于硬件可以完成CRC运算,即固化CRC算法,故实际运算又被分成左移或右移运算,即CRC成员中的“CRC方向”。

c语言crc32,c语言crc32函数-第1张图片-芜湖力博教育咨询公司
图片来源网络,侵删)

CRC的成员有:

CRCn:常见的有CRC4,CRC8,CRC16,CRC32,CRC64。

权值:即多项式poly,它是CRC运算中的“密钥”,即算法的核心。

c语言crc32,c语言crc32函数-第2张图片-芜湖力博教育咨询公司
(图片来源网络,侵删)

由于上面说过CRC算法分为左移或右移运算,故当左移运算时,权值的最低位D0为“1”时,CRC可逆,否则CRC不可逆。

当右移运算时,权值的最高位Dn-1为“1”时,CRC可逆。否则CRC不可逆。

通俗地说,多项式中含“+1”或“+X0”时,CRC可逆。否则CRC不可逆。

c语言crc32,c语言crc32函数-第3张图片-芜湖力博教育咨询公司
(图片来源网络,侵删)

CRC方向:开始已经论述,分为左移或右移运算。

CRC初值:即CRC运算的初始值init,它只对第一个CRC待校验数据作用,并与其满足交换律。

crc32多项式是唯一的吗?

CRC32:多项式是X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X1+1,对应数字是0x104C11DB7,左移32

所以是唯一的

linux为什么没有crc校验指令,包括crc16和32?

你说的是内核没有API?有啊,arch里面去找找。arm和x86汇编也有crc32硬件指令,crc16需要借助多项式乘法指令完成,arm和x86也都有

到此,以上就是小编对于c语言crc32的问题就介绍到这了,希望介绍关于c语言crc32的3点解答对大家有用

标签: 运算 CRC 多项式