Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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

PDL = t
End Function

Ответить

Номер ответа: 2
Автор ответа:
 crackoff



ICQ: 156165990 

Вопросов: 12
Ответов: 229
 Профиль | | #2 Добавлено: 19.08.03 16:29

Забыл поясннить. в dataarray(1) у меня хранится размер пакета

&H1021 - коэффициент именно для данного полинома

а вообще алгоритм под протокол РЕР (это такой промышленый протокол, кто не знает)

PDL - поразрядный сдвиг влево. написан очень глупо. можно использовать CopyMemory, так швидче работает.

А все иззи того, что в vb нет беззнакового интеджера :(

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам