Страница: 1 |
лови! ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' PDL = t Забыл поясннить. в dataarray(1) у меня хранится размер пакета &H1021 - коэффициент именно для данного полинома а вообще алгоритм под протокол РЕР (это такой промышленый протокол, кто не знает) PDL - поразрядный сдвиг влево. написан очень глупо. можно использовать CopyMemory, так швидче работает. А все иззи того, что в vb нет беззнакового интеджера Страница: 1 |
Вопрос: CRC16
Добавлено: 19.08.03 12:21
Автор вопроса: LamerOnLine | ICQ: 334781088
Люди, дайте исходник для подсчета CRC16.
Ответы
Всего ответов: 2
Номер ответа: 1
Автор ответа:
crackoff
ICQ: 156165990
Вопросов: 12
Ответов: 229
Профиль | | #1
Добавлено: 19.08.03 16:20
''Просчет контрольной суммы
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
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
End Function
Номер ответа: 2
Автор ответа:
crackoff
ICQ: 156165990
Вопросов: 12
Ответов: 229
Профиль | | #2
Добавлено: 19.08.03 16:29