什么是CRC文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是CRC文件相关的知识,希望对你有一定的参考价值。

参考技术A 一、循环冗余码校验英文名称为Cyclical Redundancy Check,简称CRC。
  它是利用除法及余数的原理来作错误侦测(Error Detecting)的。实际应用时,发送装置计算出CRC值并随数据一同发送给接收装置,接收装置对收到的数据重新计算CRC并与收到的CRC相比较,若两个CRC值不同,则说明数据通讯出现错误。
  根据应用环境与习惯的不同,CRC又可分为以下几种标准:
  ①CRC-12码;
  ②CRC-16码;
  ③CRC-CCITT码;
  ④CRC-32码。
  CRC-12码通常用来传送6-bit字符串。
  CRC-16及CRC-CCITT码则用是来传送8-bit字符,其中CRC-16为美国采用,而CRC-CCITT为欧洲国家所采用。
  CRC-32码大都被采用在一种称为Point-to-Point的同步传输中。
  下面以最常用的CRC-16为例来说明其生成过程。
  CRC-16码由两个字节构成,在开始时CRC寄存器的每一位都预置为1,然后把CRC寄存器与8-bit的数据进行异或(异或:二进制运算 相同为0,不同为1;0^0=0;0^1=1;1^0=1;1^1=0),
  之后对CRC寄存器从高到低进行移位,在最高位(MSB)的位置补零,而最低位(LSB,移位后已经被移出CRC寄存器)如果为1,则把寄存器与预定义的多项式码进行异或,否则如果LSB为零,则无需进行异或。重复上述的由高至低的移位8次,第一个8-bit数据处理完毕,用此时CRC寄存器的值与下一个8-bit数据异或并进行如前一个数据似的8次移位。所有的字符处理完成后CRC寄存器内的值即为最终的CRC值。
  下面为CRC的计算过程:
  1.设置CRC寄存器,并给其赋值FFFF(hex)。
  2.将数据的第一个8-bit字符与16位CRC寄存器的低8位进行异或,并把结果存入CRC寄存器。
  3.CRC寄存器向右移一位,MSB补零,移出并检查LSB。
  4.如果LSB为0,重复第三步;若LSB为1,CRC寄存器与多项式码相异或。
  5.重复第3与第4步直到8次移位全部完成。此时一个8-bit数据处理完毕。
  6.重复第2至第5步直到所有数据全部处理完成。
  7.最终CRC寄存器的内容即为CRC值。
  常用的CRC循环冗余校验标准多项式如下:
  CRC(16位) = X16+X15+X2+1
  CRC(CCITT) = X16+X12 +X5+1
  CRC(32位) = X32+X26+X23+X16+X12+X11+X10+ X8+X7+X5+X4+X2+X+1
  以CRC(16位)多项式为例,其对应校验二进制位列为1 1000 0000 0000 0101。
  注意:这儿列出的标准校验多项式都含有(X+1)的多项式因子;各多项式的系数均为二进制数,所涉及的四则运算仍遵循对二取模的运算规则。
  (注:对二取模的四则运算指参与运算的两个二进制数各位之间凡涉及加减运算时均进行XOR异或运算,即:1 XOR 1=0,0 XOR 0=0,1 XOR 0=1,0 XOR 1=1,即相同为0,不同为1)

什么是运行中的 CRC?

【中文标题】什么是运行中的 CRC?【英文标题】:What is a running CRC? 【发布时间】:2010-11-01 03:21:51 【问题描述】:

我已经搜索过,但无法找到有关它是什么以及如何计算的信息。


我不知道为什么这个问题被否决了。是不是很清楚和编程有关?或者我应该问:

# Or you can compute the running CRC:
$crc = 0;
$crc = Archive::Zip::computeCRC32( 'abcdef', $crc );
$crc = Archive::Zip::computeCRC32( 'ghijkl', $crc );

这里到底发生了什么?

【问题讨论】:

【参考方案1】:

嗯,基本上它只是一个CRC。 running 一词意味着您应该在数据传入时即时计算它,或者您正在进行累积计算(这是 CRC 的实现方式)。

你有一个很好的例子:

  # Or you can compute the running CRC:
  $crc = 0;
  $crc = Archive::Zip::computeCRC32( 'abcdef', $crc );
  $crc = Archive::Zip::computeCRC32( 'ghijkl', $crc );

注意$crc 变量是如何在开始时设置为 0 的,并且更新了 两次。 CRC 计算算法使用先前计算的 CRC 值并更新它。这就是为什么它有时被称为running CRC

根据您的代码,我认为您已经有一个实现,如果没有,只需谷歌搜索 CRC32。

【讨论】:

以上是关于什么是CRC文件的主要内容,如果未能解决你的问题,请参考以下文章

CRC校验失败怎么办?

用S7-200的编程软件怎么写CRC校验程序?

CRC是校验文件与压缩问题

MD5、SHA1、CRC32这三个用于检测文件是不是被修改过,哪个可靠性最高?

*.sfv是啥类型的文件?

关于解压文件遇到crc校验错误的问题