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


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