串口通信最終都是用二進(jìn)制傳輸?shù)模阌么a把二進(jìn)制轉(zhuǎn)化成十六進(jìn)制就可以了。不需要額外設(shè)置。

站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到海南州網(wǎng)站設(shè)計(jì)與海南州網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、國(guó)際域名空間、虛擬主機(jī)、企業(yè)郵箱。業(yè)務(wù)覆蓋海南州地區(qū)。
大概看了下。有變量定義類型錯(cuò)誤,修改如下:
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'這里應(yīng)該定義為long.因?yàn)橄旅尜x值是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
'Text1.Text 輸入數(shù)據(jù)
'Text2.Text 輸出數(shù)據(jù)
Dim ReturnData(1) As Byte
Private Sub Command1_Click()
Dim CRC(2) As Byte
Dim d(6) As Byte '待傳輸數(shù)據(jù)
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)) '調(diào)用CRC16計(jì)算函數(shù)
' 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 '多項(xiàng)式碼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) '每一個(gè)數(shù)據(jù)與CRC寄存器進(jìn)行異或
For Flag = 0 To 9
SaveHi = CRC16Hi
SaveLo = CRC16Lo
CRC16Hi = CRC16Hi \ 2 '高位右移一位
CRC16Lo = CRC16Lo \ 2 '低位右移一位
If ((SaveHi And H1) = H1) Then '如果高位字節(jié)最后一位為1
CRC16Lo = CRC16Lo Or H80 '則低位字節(jié)右移后前面補(bǔ)1
End If '否則自動(dòng)補(bǔ)0
If ((SaveLo And H1) = H1) Then '如果LSB為1,則與多項(xiàng)式碼進(jìn)行異或
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
很有意思。
原文數(shù)據(jù)全為:“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 ; ”
得出這樣的結(jié)果是有很多方法都可以實(shí)現(xiàn)的:
比如每個(gè)原數(shù)上加上個(gè)常數(shù)就可以了。
00+09=09;得出第一組加密后的數(shù)值
00+51=51;得出第二組加密后的數(shù)值
...
00+CD=CD;得出第16組加密后的數(shù)值.
加密的方法還有很多,不過(guò)這種最簡(jiǎn)單。
還有就是你給的原文太單一了,不能夠更好的分析數(shù)據(jù)的規(guī)律。
如果你能把原文改為如下這段代碼再去加密一下,再把加密結(jié)果貼上來(lái)看一下就好多了。
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 ;
以上是單片機(jī)高手團(tuán)為您解答。
如果還沒(méi)解決你的問(wèn)題,可以加我百度HI賬號(hào)。
應(yīng)該是你的轉(zhuǎn)換格式不正確,下面代碼就是將文本框中以一個(gè)空格隔開的十六進(jìn)制轉(zhuǎn)為字節(jié)的代碼,文本框中數(shù)字格式為: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)
如果有問(wèn)題可以再聯(lián)系。
把c的做成dll直接調(diào)用不就行了
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
當(dāng)前名稱:vb.netcrc16,vb crc16
文章路徑:http://chinadenli.net/article12/hshodc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營(yíng)銷型網(wǎng)站建設(shè)、動(dòng)態(tài)網(wǎng)站、品牌網(wǎng)站設(shè)計(jì)、外貿(mào)建站、面包屑導(dǎo)航、網(wǎng)站營(yíng)銷
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)