0D 38 87 43 00 00 00 00 01 00 01 29 6A
где 29 6A - это CRC
0D -контрольный байт , указывающий колво байт в пакете
в задании неговорится о том учитывается 0D или нет
подститать нуна согласно http://ostapbenderx.narod.ru/Data/9/905/103.jpg
может кто подскажет как это посчитать?
у меня почемуто постоянно получается B0 D1 с учетом 0D
и отрицательное число без учета 0D
использую этот код
- Код: Выделить всё
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''Просчет контрольной суммы
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Function CRC16(DataArray() As Byte, Optional wInitCRC As Long = 0) As Long
Dim crc As Integer, j As Byte, size As Integer, i As Long
crc = wInitCRC
For i = 0 To DataArray(1) - 3
crc = crc Xor PDL((DataArray(i)), 8)
For j = 0 To 7
If crc And &H8000 Then
crc = PDL(crc, 1) Xor &H1021
Else
crc = PDL(crc, 1)
End If
Next j
Next i
CRC16 = crc
End Function
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''Поразрядный сдвиг влево
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Function PDL(d As Integer, Optional j As Integer = 1) As Integer
Dim pdlBytes(0 To 15) As Boolean
Dim i As Integer, t As Integer, k As Integer
'получаем массив битов
For i = 1 To 16
pdlBytes(16 - i) = d And (2 ^ (i - 1))
Next i
'сдвигаем все влево
For k = 1 To j
For i = 1 To 15
pdlBytes(i - 1) = pdlBytes(i)
Next i
pdlBytes(15) = False
Next k
'собираем обратно число
For i = 1 To 15
If pdlBytes(i) Then
t = t Or 2 ^ (15 - i)
End If
Next i
If pdlBytes(0) Then t = t Or &H8000
PDL = t
End Function