① crc如何校驗
請參考我先前的回答,如下
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值。
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(16位)多項式為 X16+X15+X2+1,其對應校驗二進制位列為1 1000 0000 0000 0101。
② android裡面沒有crc16校驗庫嗎
沒有,可以自己寫個C ,然後打包成SO庫
③ CRC校驗失敗怎麼辦
CRC即循環冗餘校驗碼,CRC校驗失敗可能原因和解決方法如下:
1、可能是安裝包有問題 從新下載個安裝包就好了。
2、有錯誤文件。解決方法:試著在解壓時勾選保留錯誤文件,如果不行的話看看殺毒軟體里是不是把這個文件隔離了。
3、可能是硬體原因,比如內存不夠。只能換硬體了
校驗原理
系統內部預先設置根據校驗方法所導出的校驗公式編製成的校驗程序,當帶有校驗碼的代碼輸入系統時,系統利用校驗程序對輸入的本體碼進行運算得出校驗結果之後,再將校驗結果與輸入代碼的校驗碼進行對比來檢測輸入的正確與否。
如果兩者一致,則表明代碼輸入正確,系統允許進入,如果不一致,則表明代碼輸入有誤,系統拒絕進入,並要求代碼重新輸入。
④ CRC校驗是什麼
CRC校驗碼:是數據通信領域中最常用的一種查錯校驗碼,其特徵是信息欄位和校驗欄位的長度可以任意選定。循環冗餘檢查(CRC)是一種數據傳輸檢錯功能。
可以對數據進行多項式計算,並將得到的結果附在幀的後面,接收設備也執行類似的演算法,以保證數據傳輸的正確性和完整性。
CRC校驗中有兩個關鍵點,一是預先確定一個發送送端和接收端都用來作為除數的二進制比特串(或多項式),可以隨機選擇,也可以使用國際標准。
但是最高位和最低位必須為1;二是把原始幀與上面計算出的除數進行模2除法運算,計算出CRC碼。
⑤ 怎樣修復CRC校驗錯誤
CRC即循環冗餘校驗碼,CRC校驗失敗可能原因和解決方法如下:
1.可能是安裝包有問題 從新下載個安裝包就好了
2.有錯誤文件。解決方法:試著在解壓時勾選保留錯誤文件,如果不行的話看看殺毒軟體里是不是把這個文件隔離了。
3可能是硬體原因,比如內存不夠。只能換硬體了
⑥ 關於CRC效驗
為保證傳輸過程的正確性,需要對通信過程進行差錯控制。差錯控制最常用的方法是自動請求重發方式(ARQ)、向前糾錯方式(FEC)和混合糾錯(HEC)。在傳輸過程誤碼率比較低時,用FEC方式比較理想。在傳輸過程誤碼率較高時,採用FEC容易出現「亂糾」現象。HEC方式則是ARQ和FEC的結合。在許多數字通信中,廣泛採用ARQ方式,此時的差錯控制只需要檢錯功能。實現檢錯功能的差錯控制方法很多,傳統的有:奇偶校驗、校驗和檢測、重復碼校驗、恆比碼校驗、行列冗餘碼校驗等,這些方法都是增加數據的冗餘量,將校驗碼和數據一起發送到接受端。接受端對接受到的數據進行相同校驗,再將得到的校驗碼和接受到的校驗碼比較,如果二者一致則認為傳輸正確。但這些方法都有各自的缺點,誤判的概率比較高。
循環冗餘校驗CRC(Cyclic Rendancy Check)是由分組線性碼的分支而來,其主要應用是二元碼組。編碼簡單且誤判概率很低,在通信系統中得到了廣泛的應用。下面重點介紹了CRC校驗的原理及其演算法實現。
CRC校驗可以100%地檢測出所有奇數個隨機錯誤和長度小於等於k(k為g(x)的階數)的突發錯誤。所以CRC的生成多項式的階數越高,那麼誤判的概率就越小。
CRC代碼的一些基本概念和運算:
CRC多項式:
例:
代碼:1010111 對應的多項式為:X6+X4+X2+X+1
多項式X5+X3+X2+X1+1對應的代碼為101111
CRC生成多項式:
首位和最後一位必須是1。CRC生成多項式是給定的,在傳輸過程中不變,即發送和接收端生成碼相同。
一些常用的校驗碼為:
CRC8=X8+X5+X4+1
CRC-CCITT=X16+X12+X5+1
CRC16=X16+X15+X5+1
CRC12=X12+X11+X3+X2+1
CRC32=X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X1+1
CRC的運算本質是異或運算(模2除法)
例:原信息碼為1011001
生成碼為11001
校驗碼計算過程
① 將信息碼左移4位(生成碼長-1);得到10110010000
② 異或運算
10110010000
11001
01111010000(前面的數進行異或運算,後面的直接抄下來)
11001
0011110000(和生成碼異或運算的必須從1開始)
11001
00111000
11001
001010
這樣得到的結果為1010,即為所需要的校驗碼,添加到信息碼後,得到發送的代碼為:
10110011010
我把上面的手算過程用c#寫了一段程序,如下:
using System;
namespace mainClass
{
public class mainProgress
{
public static void Main()
{
byte[] msg={1,0,1,1,0,0,1};//信息碼
byte[] gmsg=new byte[msg.Length+4];
crc c = new crc();
gmsg=c.code(msg);
Console.Write("編碼後字元串為:");
for (int i = 0; i < gmsg.Length; i++)
{
Console.Write("{0}", gmsg[i].ToString());
}
Console.Write("\n");
byte[] gmsg1={ 1, 0, 1, 1, 0, 1, 1 };//接收到的代碼
bool r = c.det(gmsg1);
if (r)
{
Console.WriteLine("傳輸正確");
}
else
{ Console.WriteLine("傳輸錯誤"); }
}
}
public class crc//CRC編碼類
{
private byte[] g = { 1,1,0,0,1};//生成碼
public byte[] code(byte[] msg)//編碼
{
byte[] gmsg=new byte[g.Length+msg.Length-1];
msg.CopyTo(gmsg, 0);//
for (int i = 0; i < msg.Length; i++)//完成異或運算,即模2除法
{
if (gmsg[i] == 1)
{
for (int j = 0; j < g.Length; j++)
{
if (gmsg[i + j] == g[j])
gmsg[i + j] = 0;
else
gmsg[i + j] = 1;
}
}
}
msg.CopyTo(gmsg, 0);
return gmsg;
}
private bool f=true;
//接收端檢測
public bool det(byte[] gmsg)
{
for (int i = 0; i < gmsg.Length - g.Length+1; i++)
{
if(gmsg[i]==0)
continue;
for (int j = 0; j < g.Length; j++)
{
if (gmsg[i + j] == g[j])
gmsg[i + j] = 0;
else
gmsg[i + j] = 1;
}
}
for (int i = 0; i < gmsg.Length; i++)
{
if (gmsg[i] == 1)
f = false;
}
return f;
}
}
}
⑦ 什麼叫CRC校驗
CRC是什麼東西呢?其實我們大家都不應該會對它陌生,回憶一下?你用過RAR和ZIP等壓縮軟體嗎?它們是不是常常會給你一個惱人的「CRC校驗錯誤」信息呢?我想你應該明白了吧,CRC就是塊數據的計算值,它的全稱是「Cyclic Rendancy Check」,中文名是「循環冗餘碼」,「CRC校驗」就是「循環冗餘校驗
⑧ 什麼是CRC校驗,原理是什麼
CRC即循環冗餘校驗碼(Cyclic Rendancy Check):是數據通信領域中最常用的一種差錯校驗碼,其特徵是信息欄位和校驗欄位的長度可以任意選定。 基本原理是:在K位信息碼後再拼接R位的校驗碼,整個編碼長度為N位,因此,這種編碼又叫(N,K)碼。對於一個給定的(N,K)碼,可以證明存在一個最高次冪為N-K=R的多項式G(x)。根據G(x)可以生成K位信息的校驗碼,而G(x)叫做這個CRC碼的生成多項式。 校驗碼的具體生成過程為:假設發送信息用信息多項式C(X)表示,將C(x)左移R位,則可表示成C(x)*2的R次方,這樣C(x)的右邊就會空出R位,這就是校驗碼的位置。通過C(x)*2的R次方除以生成多項式G(x)得到的余數就是校驗碼。
⑨ 請問什麼是CRC校驗碼
循環校驗碼(CRC碼):
是數據通信領域中最常用的一種差錯校驗碼,其特徵是信息欄位和校驗欄位的長度可以任意選定。
生成CRC碼的基本原理:
任意一個由二進制位串組成的代碼都可以和一個系數僅為『0』和『1』取值的多項式一一對應。例如:代碼1010111對應的多項式為x6+x4+x2+x+1,而多項式為x5+x3+x2+x+1對應的代碼101111。
CRC碼集選擇的原則:
若設碼字長度為N,信息欄位為K位,校驗欄位為R位(N=K+R),則對於CRC碼集中的任一碼字,存在且僅存在一個R次多項式g(x),使得
V(x)=A(x)g(x)=xRm(x)+r(x);
其中: m(x)為K次信息多項式, r(x)為R-1次校驗多項式,
g(x)稱為生成多項式:
g(x)=g0+g1x+ g2x2+...+g(R-1)x(R-1)+gRxR
發送方通過指定的g(x)產生CRC碼字,接收方則通過該g(x)來驗證收到的CRC碼字。
⑩ crc校驗碼計算方法是什麼
已知信息位為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碼。
(10)androidcrc校驗擴展閱讀:
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