vb.netcrc16,vb crc16

VB.NET串口通讯怎么发送和接收十六进制?

串口通信最终都是用二进制传输的,你用代码把二进制转化成十六进制就可以了。不需要额外设置。

站在用户的角度思考问题,与客户深入沟通,找到海南州网站设计与海南州网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都网站设计、成都网站制作、企业官网、英文网站、手机端网站、网站推广、国际域名空间、虚拟主机、企业邮箱。业务覆盖海南州地区。

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,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

请教用VB.NET向网口发送16进制的数的方法.

很有意思。

原文数据全为:“00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ”

加密后变成了:“09 51 55 F4 FB 10 6F A4 D3 E8 87 46 F8 2F 49 CD ; ”

得出这样的结果是有很多方法都可以实现的:

比如每个原数上加上个常数就可以了。

00+09=09;得出第一组加密后的数值

00+51=51;得出第二组加密后的数值

...

00+CD=CD;得出第16组加密后的数值.

加密的方法还有很多,不过这种最简单。

还有就是你给的原文太单一了,不能够更好的分析数据的规律。

如果你能把原文改为如下这段代码再去加密一下,再把加密结果贴上来看一下就好多了。

00000140h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ;

00000150h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ;

00000160h: 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 ; 00000170h: 00 10 20 30 40 50 60 70 80 90 A0 B0 C0 D0 E0 F0 ;

00000180h: 11 11 11 11 11 22 22 22 22 22 22 EE EE EE FF FF ;

以上是单片机高手团为您解答。

如果还没解决你的问题,可以加我百度HI账号。

请教用VB.NET向串口发送16进制的数的方法

应该是你的转换格式不正确,下面代码就是将文本框中以一个空格隔开的十六进制转为字节的代码,文本框中数字格式为:01 02 03

Dim TestArray() As String = Split(TextBox1.Text)

Dim hexBytes() As Byte

ReDim hexBytes(TestArray.Length - 1)

Dim i As Integer

For i = 0 To TestArray.Length - 1

hexBytes(i) = Val("h" TestArray(i))

Next

SerialPort.Write(hexBytes, 0, hexBytes.Length)

如果有问题可以再联系。

谁能帮我看看 这段VB求CRC-16的代码为什么和下面的C语言所求的CRC不一致。

把c的做成dll直接调用不就行了

Function CRC16_0(data() As Byte) As Long

Dim p1 As Long

Dim datalen As Long

datalen=UBound(data)

p1=VarPtr(data(1))

CRC16_0= cal_crc(p1,datalen)

End Function


文章标题:vb.netcrc16,vb crc16
网站路径:http://scyanting.com/article/hshodc.html