當前位置:首頁 » 操作系統 » crc源碼

crc源碼

發布時間: 2022-07-10 10:32:49

① 求crc32校驗C#源碼,能用的哦!跪謝

我有CRC16校驗的C#代碼:

CRC循環冗餘錯誤校驗計算方法&&代碼

CRC—16(循環冗餘錯誤校驗)生成CRC—16校驗位元組的步驟如下:
(1)裝入一個16位寄存器,所有數位均為1。
(2)該16位寄存器的高位位元組與開始8位位元組進行「異或」運算。運算結果放入這個16位寄存器。
(3)把這個16位寄存器向右移1位。
(4a)若向右(標記位)移出的數位是1,則生成多項式1010000000000001和這個寄存器進行「異或」運算。
(4b)若向右移出的數位是0,則返回(3)。
(5)重復(3)和(4),直至移出8位。
(6)另外8位與該16位寄存器進行「異或」運算。
(7)重復(3)—(6),直至該報文所有位元組均與16位寄存器進行「異或」運算,並移位8次。
(8)這個16位寄存器的內容即2位元組CRC錯誤校驗

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace CommPort
{
public class CRC16
{
public CRC16()
{
}
//校驗crc16
public static bool check(byte[] buff, int index, int len)
{ //buff是待校驗數組,index為起始索引,len為校驗長度
//buff是待校驗數組,index為起始索引,len為校驗長度
uint i, j;
byte h, l;
byte c, d;
h = 0x55;
l = 0xaa;
for (i = (uint)index; i < index + len; i++)
{
h = (byte)(buff[i] ^ h);
for (j = 0; j < 8; j++)
{
c = (byte)(l & 0x80);
l <<= 1;
d = (byte)(h & 0x80);
h <<= 1;
if (c != 0)
h |= 0x01;
if (d != 0)
{
//
h = (byte)(h ^ 0x10);
l = (byte)(l ^ 0x21);
}
}
}
if ((h == 0) && (l == 0))
return true;
else
return false;
}
//計算一個byte數組中指定位置的crc16
public static byte[] cal(byte[] buff, int index, int len)
{
//buff是待校驗數組,index為起始索引,len為校驗長度
uint i, j;
byte h, l;
byte c, d;
h = 0x55;
l = 0xaa;
for (i = (uint)index; i < index + len; i++)
{
h = (byte)(buff[i] ^ h);
for (j = 0; j < 8; j++)
{
c = (byte)(l & 0x80);
l <<= 1;
d = (byte)(h & 0x80);
h <<= 1;
if (c != 0)
h |= 0x01;
if (d != 0)
{
//
h = (byte)(h ^ 0x10);
l = (byte)(l ^ 0x21);
}
}
}
byte[] resu = new byte[2];
resu[0] = (byte)h;
resu[1] = (byte)l;
return resu;
}
}
}

② 求一個CRC校驗C++源代碼。題目:發送數據為1101011011,生成的多項式為P(X)=X4+X+1(X4為X的4次方),

下面的代碼輸入為原數據和多項式對就的二進制碼,輸出為產生的校驗碼。

如原數據是1101011011,多項式是X^4+X+1(即10011)。產生的校驗碼為1110。

輸入110101101110011

輸出1110

#include<iostream>
#include<cstring>
#include<iomanip>
usingnamespacestd;

#defineWORDSIZE255

intgetNum(chara[],intn);
voidshowNum(intr,intn);

intmain(intargc,char*argv[])
{
cout<<"pleaseinputXandP:"<<endl;
intx,p,lenA,lenP;
chara[WORDSIZE];
memset(a,'',WORDSIZE);
cin>>a;
lenA=strlen(a);
x=getNum(a,WORDSIZE);
memset(a,'',WORDSIZE);
cin>>a;
lenP=strlen(a);
p=getNum(a,WORDSIZE);

x<<=lenP-1;
intresult=0,i;
for(i=lenA-1;i>=0;i--){
if(x&(1<<(i+lenP-1))){
result=result*2+1;
x^=(p<<i);

}else{
result=result*2;
}
}
showNum(x,lenP-1);

return0;
}

intgetNum(chara[],intn)
{
intk=0;
inti;
for(i=0;i<n&&a[i]!='';i++){
k=k*2+a[i]-'0';
}
returnk;
}

voidshowNum(intr,intn)
{
inti;
for(i=n-1;i>=0;i--){
if(r&(1<<i)){
cout<<1;
}else{
cout<<0;
}
}
cout<<endl;
}

這是以前自己偷懶做計算機網路CRC題目時寫的程序,希望對你有用。

③ vb,crc校驗的程序

'Text1.Text 輸入數據
'Text2.Text 輸出數據
Dim ReturnData(1) As Byte
Private Sub Command1_Click()
Dim CRC(2) As Byte
Dim d(6) As Byte '待傳輸數據
ReDim data(7) As Byte
For i = 0 To 5
data(i) = "&h" + Mid(Text1.Text, 2 * i + 1, 2)
Debug.Print data(i)
Next i
Call CRC16(data, UBound(data) - 2, data(6), data(7)) '調用CRC16計算函數
' CRC(0)為高位
' CRC(1)為低位
End Sub
Function CRC16(data() As Byte, i As Integer, ByRef ReturnDatalo As Byte, ByRef ReturnDatahi As Byte) As String
Dim CRC16Lo As Byte, CRC16Hi As Byte 'CRC寄存器
Dim CL As Byte, CH As Byte '多項式碼&HA001
Dim SaveHi As Byte, SaveLo As Byte
Dim Flag As Integer

CRC16Lo = &HFF
CRC16Hi = &HFF
CL = &H1
CH = &HA0

For i = 0 To UBound(data) - 2
CRC16Lo = CRC16Lo Xor data(i) '每一個數據與CRC寄存器進行異或
For Flag = 0 To 9
SaveHi = CRC16Hi
SaveLo = CRC16Lo
CRC16Hi = CRC16Hi \ 2 '高位右移一位
CRC16Lo = CRC16Lo \ 2 '低位右移一位
If ((SaveHi And &H1) = &H1) Then '如果高位位元組最後一位為1
CRC16Lo = CRC16Lo Or &H80 '則低位位元組右移後前面補1
End If '否則自動補0
If ((SaveLo And &H1) = &H1) Then '如果LSB為1,則與多項式碼進行異或
CRC16Hi = CRC16Hi Xor CH
CRC16Lo = CRC16Lo Xor CL
End If
Next Flag
Next i

ReturnDatahi = CRC16Hi 'CRC高位
ReturnDatalo = CRC16Lo 'CRC低位

Debug.Print Hex(CRC16Lo), Hex(CRC16Hi)

Text2.Text = Text1.Text & Hex(CRC16Lo) & Hex(CRC16Hi)

End Function

④ 【人民幣酬謝】求易語言crc16校驗和代碼

網上查呀

⑤ 誰有VB CRC16校驗源碼

Public Function UnsignInt(ByRef Num As Variant) As Boolean
Num = Num And &HFFFF&
End Function

'8005
Public Function CRC168005(ptr() As Byte) As String
Dim i As Integer, J As Integer
Dim Index As Integer
Dim crc As Long

crc = 0
Index = 0

For J = 0 To UBound(ptr)
i = &H80
Do While (i > 0)
UnsignInt crc

If ((crc And &H8000&) <> 0) Then

crc = crc * 2

UnsignInt crc
crc = crc Xor &H8005&

Else
crc = crc * 2
'crc = UnsignedAdd(crc, crc)

End If

If ((ptr(Index) And i) <> 0) Then
UnsignInt crc
crc = crc Xor &H8005& '關鍵點 結尾&符號
End If

i = i / 2
Loop

Index = Index + 1

Next

CRC168005 = Hex(crc)

End Function

'A001
Public Function CRC16(data() As Byte) As String
Dim CRC16Lo As Byte, CRC16Hi As Byte 'CRC寄存器
Dim CL As Byte, CH As Byte '多項式碼&HA001
Dim SaveHi As Byte, SaveLo As Byte
Dim i As Integer
Dim flag As Integer
CRC16Lo = &HFF
CRC16Hi = &HFF
CL = &H1
CH = &HA0
For i = 0 To UBound(data)
CRC16Lo = CRC16Lo Xor data(i) '每一個數據與CRC寄存器進行異或
For flag = 0 To 7
SaveHi = CRC16Hi
SaveLo = CRC16Lo
CRC16Hi = CRC16Hi \ 2 '高位右移一位
CRC16Lo = CRC16Lo \ 2 '低位右移一位
If ((SaveHi And &H1) = &H1) Then 'VB下的CRC校驗程序高位位元組最後一位為1
CRC16Lo = CRC16Lo Or &H80 '則低位位元組右移後前面補1
End If '否則自動補0
If ((SaveLo And &H1) = &H1) Then 'VB下的CRC校驗程序LSB為1,則與多項式碼進行異或
CRC16Hi = CRC16Hi Xor CH
CRC16Lo = CRC16Lo Xor CL
End If
Next flag
Next i
Dim ReturnData(2) As Byte
ReturnData(0) = CRC16Hi 'CRC高位
ReturnData(1) = CRC16Lo 'CRC低位
CRC16 = Bit(Hex(ReturnData(0))) & Bit(Hex(ReturnData(1)))
End Function

⑥ 請教高手!!急呀,請問誰有現成的CRC(循環冗餘校驗碼)糾錯源代碼

我知道,電話是;654824565。

熱點內容
加密文件夾免費下載 發布:2024-11-20 10:48:47 瀏覽:772
有什麼低配置好玩的單機游戲 發布:2024-11-20 10:22:18 瀏覽:700
去哪裡可以把手機密碼清除 發布:2024-11-20 10:17:06 瀏覽:530
什麼游戲適合電腦配置不高的玩 發布:2024-11-20 09:52:02 瀏覽:235
安卓如何拷貝微信聊天記錄 發布:2024-11-20 09:51:02 瀏覽:940
php中for 發布:2024-11-20 09:48:04 瀏覽:29
安卓手機用什麼軟體防止別人蹭網 發布:2024-11-20 09:37:18 瀏覽:838
頂級asmr助眠解壓赫敏 發布:2024-11-20 09:36:34 瀏覽:429
帝瓦雷演算法 發布:2024-11-20 09:16:11 瀏覽:52
怎麼查看一個ip地址伺服器關閉 發布:2024-11-20 09:12:26 瀏覽:443