vb.net中crc校验,c语言实现crc校验

vb,crc校验的程序

'Text1.Text 输入数据

兴城网站建设公司创新互联,兴城网站设计制作,有大型网站制作公司丰富经验。已为兴城上1000家提供企业网站建设服务。企业网站搭建\外贸网站建设要多少钱,请找那个售后服务好的兴城做网站的公司定做!

'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

CRC校验是什么?

CRC校验码:是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能。

可以对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。

CRC校验中有两个关键点,一是预先确定一个发送送端和接收端都用来作为除数的二进制比特串(或多项式),可以随机选择,也可以使用国际标准。

但是最高位和最低位必须为1;二是把原始帧与上面计算出的除数进行模2除法运算,计算出CRC码。

VB CRC校验问题

大概看了下。有变量定义类型错误,修改如下:

Public

Function

crc16(ByRef

cmdstring()

As

Byte,

DataLen

As

Integer)

As

String

Dim

data

As

Integer

Dim

i

As

Integer

Dim

CRCHi

As

long,

CRCLo

As

long'这里应该定义为long.因为下面赋值是long型。朋友。

Dim

iIndex

As

Long

Dim

CRCStr

As

String

Dim

DataStr

As

String

CRCLo

=

HFF'看这里的赋值。long型

CRCHi

=

HFF

For

i

=

To

DataLen

iIndex

=

CRCLo

Xor

cmdstring(i)

CRCLo

=

CRCHi

Xor

GetCRCLo(iIndex)

'低位处理

CRCHi

=

GetCRCHi(iIndex)

'高位处理

DataStr

=

DataStr

Chr(cmdstring(i))

Next

i

Dim

ReturnData(1)

As

Byte

ReturnData(1)

=

CRCHi

ReturnData(0)

=

CRCLo

CRCStr

=

StrConv(ReturnData,

vbUnicode)

crc16

=

DataStr

+

CRCStr

End

Function

vb如何实现CRC12校验

异或在计算机二进制运算中是一种常用运算,最常见于数据的简单加密。 它的运算规则是这样的,两组数据对位后进行比较——相同,即同为0或同为1,输出0;不同,输出1。 看下面的例子,你会掌握异或运算:(第一组数据) :0011 0011 0011 0011(第二组数据) :0000 1111 0011 1100(异或运算结果):0011 1100 0000 1111 ————————————————————————————————————我们先把校验对象(31 30 34 32 H)划成二进制:0011 0001 0011 0000 0011 0100 0011 0010 把校验多项式(18 0D H)划成二进制:0001 1000 0000 1101 据CRC12校验规则,被除数为校验对象后加12个“0”,除数为校验多项式,运算时以高位对齐。以下使用计算法对校验对象进行CRC12校验。在每次计算前,高位去零,一直计算到被除数位数少于除数位数时停止。 计算过程:校验对象: 0011 0001 0011 0000 0011 0100 0011 0010被除数 →  0011 0001 0011 0000 0011 0100 0011 0010 0000 0000 0000校验多项式:0001 1000 0000 1101除数  →  1 1000 0000 1101 高位去零,对齐后进行异或运算: 110001001100000011010000110010000000000000

/1100000001101

=000001001010100011010000110010000000000000(高位去零,再次运算) 1001010100011010000110010000000000000

/1100000001101

=0101010101110010000110010000000000000(高位去零,再次运算) 101010101110010000110010000000000000

/1100000001101

=011010101000110000110010000000000000(高位去零,再次运算) 11010101000110000110010000000000000

/1100000001101

=00010101011100000110010000000000000(高位去零,再次运算) 10101011100000110010000000000000

/1100000001101

=01101011111010110010000000000000(高位去零,再次运算) 1101011111010110010000000000000

/1100000001101

=0001011110111110010000000000000(高位去零,再次运算) 1011110111110010000000000000

/1100000001101

=0111110110011010000000000000(高位去零,再次运算) 111110110011010000000000000

/1100000001101

=001110110101110000000000000(高位去零,再次运算) 1110110101110000000000000

/1100000001101

=0010110100011000000000000(高位去零,再次运算) 10110100011000000000000

/1100000001101

=01110100000010000000000(高位去零,再次运算) 1110100000010000000000

/1100000001101

=0010100001111000000000(高位去零,再次运算) 10100001111000000000

/1100000001101

=01100001100010000000(高位去零,再次运算) 1100001100010000000

/1100000001101

=0000001101111000000(高位去零,再次运算) 1101111000000

/1100000001101

=0001111001101(高位去零,符合终止条件)=1111001101 所以,CRC12校验结果:11 1100 1101 →(十六进制)→ 3CDH————————————————————————————————————看你自己能不能理解,CRC12校验类模块写好了再给你发过去。


文章标题:vb.net中crc校验,c语言实现crc校验
本文网址:http://azwzsj.com/article/hodejj.html