0
- Мне нужна помощь в создании контрольной суммы для пакета tcp из массива байта.
- Это код работает, поскольку я тестировал его с помощью строки .
- Проблема в том, что я должен передать массив байтов этой функции .
- На данный момент я создал его просто, используя жесткий встроенный серийный номер времени, в противном случае это очень длинный код для входа в систему .
- Значение этого b1: 68: де: 3a: 15: CD: 5б: 07 проверяется с помощью Wireshark и CRC должны быть E2B6 проверены с онлайн стс this
Теперь, приходя в основной момент я просто не могу» t вызовите этот метод, поскольку этот метод ожидает некоторые строковые значения, и я должен передать шестнадцатеричные значения. Как я могу это сделать.crc16 ccitt из массива байтов
Private Sub ConnectTCP_Click(sender As Object, e As EventArgs) Handles ConnectTCP.Click Dim Serial As UInt32 = "123456789" Dim time As UInt32 = "987654321" Dim buffer2() As Byte = BitConverter.GetBytes(time) Dim buffer3() As Byte = BitConverter.GetBytes(Serial) Dim array4(buffer2.Length + buffer3.Length - 1) As Byte Array.Copy(buffer2, array4, buffer2.Length) Array.Copy(buffer3, 0, array4, buffer2.Length, buffer3.Length) getCRC16(array4) 'What I need to do here end sub
"функции CRC16 МККТТ"»
Public Function getCRC16(ByVal strInput As String)
Dim lngCheck As Long
Dim Power(7) As Integer
Dim I As Integer
Dim J As Integer
Dim Poly As Long
Dim CRC As Long
Dim TestBit As Boolean
Dim TestBit1 As Boolean
Dim TestBit2 As Boolean
Poly = &H1021
CRC = &HFFFF
For J = 0 To 7
Power(J) = 2^J
Next J
For I = 1 To Len(strInput)
lngCheck = Asc(Mid$(strInput, I, 1))
For J = 7 To 0 Step -1
If (CRC And 32768) = 32768 Then
TestBit1 = True
Else
TestBit1 = False
End If
If (lngCheck And Power(J)) = Power(J) Then
TestBit2 = True
Else
TestBit2 = False
End If
TestBit = TestBit1 Xor TestBit2
CRC = (CRC And 32767) * 2
If TestBit = True Then
CRC = CRC Xor Poly
End If
Next J
Next I
Dim tmp As String
tmp = Hex(CRC)
CRCTCP.Text = tmp
getCRC16 = tmp
End Function
' BitConverter.ToString (array4) '? _Converts числовое значение каждого элемента указанного массива байтов в эквивалентное шестнадцатеричное представление строки. –
Привет, Алекс. Что случилось, когда вы используете bitconverter.tost кольцо, которое обрабатывает «b1: 68: de: 3a: 15: cd: 5b: 07» как «b» «1» «6», так как изменяется один символ и целая вещь. –
- это шестнадцатеричное значение "123456789" "987654321". Вы можете попробовать калькулятор Windows для преобразования от десятичной до шестнадцатеричной. Но он будет показывать спереди назад. Когда вы отправляете какой-либо пакет, он преобразуется в шестнадцатеричный. –