vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevDataGrid - Gönnen Sie Ihrem SQL-Kommando diesen krönenden Abschluß!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fortgeschrittene Programmierung
hilfe bei checksummenerstellung 
Autor: bqstony
Datum: 22.12.04 15:19

hallo zusammen.
ich rede gar nicht gross um den brei. sondern presentiere euch gleich meinen source.
ach ja, die false checksumme trift auf bei zu langem eingangs strings von denem die checksumme ermittelt werden soll. ich weiss nicht ob ihr mir helfen köönt. und fühlt euch nicht gleich erschlagen von dem source. nur die erste function ist entscheidend

zähle voll auf euch. ansonsten hoffe ich der linksverschieber kann jemanden anders gut helfen. (für den kompletten linksschieber mir pmen) musste kürzen

'BEGIN*#############################******############################
'**********/ Modul LmsCRC16-Funktionen
'*******/ Created: November 2004
'******/ Autor : Michael Helfenstein
'****************************************************
'In: Errechnen einer CRC16 Prüfsumme aus einem String
'Out: Der komplete string inklusive 2Byte CRC-Checksumme
'****************************************************
Public Function createCRC16Check(ByVal msg As String, _
Optional ByRef sCRC16out As String) As String

'On Error Resume Next
Dim lCrc16 As Long
Dim sCrc16 As String
Dim byteAbData(0 To 1) As Byte
Dim lLen As Long
Dim i As Integer
Dim sTmp As String

lLen = Len(msg)
i = 1
lCrc16 = 0
byteAbData(0) = 0

Do While (i <= lLen)
byteAbData(1) = byteAbData(0)
byteAbData(0) = CLng("&H" & Mid(msg, i, 2))

If (lCrc16 And &H8000) Then '"0x8000"
lCrc16 = ShiftLeft((lCrc16 And &H7FFF), 1) '"0x7fff"
lCrc16 = lCrc16 Xor &H8005 'CRC16_GEN_POL
Else
lCrc16 = ShiftLeft(lCrc16, 1)

End If


'lCrc16 = lCrc16 Xor CLng(byteAbData(0) Or (ShiftLeft(byteAbData(1), 8)))
lCrc16 = lCrc16 Xor (CLng(byteAbData(0)) Or (ShiftLeft(byteAbData(1), 8)))

i = i + 2
Loop


sCrc16 = CStr(Hex(lCrc16))

'nullstellen auffüllen bis len = 4
Do While (Len(sCrc16) < 4)
sCrc16 = "0" & sCrc16
Loop


'koriegieren der Checksumm Reihenfolge
'HighBit -> LowBit / LowBit -> HighBit
sTmp = Right(sCrc16, 2)
sCrc16 = Mid(sCrc16, Len(sCrc16) - 3, 2)
sCrc16 = sTmp & sCrc16

'rückgabe der cecke summe
sCRC16out = sCrc16
'rückgabe des gesammten strings inklusive CRCcheck
createCRC16Check = msg & sCRC16out

'test suit
' createCRC16Check = sCrc16

End Function


'****************************************************
'Linksverschieber. schiebt anzal bits nach links
'ersetzen des Operators aus C#: <<
'Quelle: http://vb-tec.de/bitshift.htm
'Autor: Jost Schwider
'Datum: 03.10.2001-01.12.2001
'****************************************************
Public Function ShiftLeft(ByVal Value As Long, _
ByVal ShiftCount As Long) As Long

On Error Resume Next

Select Case ShiftCount
Case 0&
ShiftLeft = Value
Case 1&
If Value And &H40000000 Then
ShiftLeft = (Value And &H3FFFFFFF) * &H2& Or &H80000000
Else
ShiftLeft = (Value And &H3FFFFFFF) * &H2&
End If
Case 2&
If Value And &H20000000 Then
ShiftLeft = (Value And &H1FFFFFFF) * &H4& Or &H80000000
Else
ShiftLeft = (Value And &H1FFFFFFF) * &H4&
End If
Case 8&
If Value And &H800000 Then
ShiftLeft = (Value And &H7FFFFF) * &H100& Or &H80000000
Else
ShiftLeft = (Value And &H7FFFFF) * &H100&
End If
End Select
End Function

Cya At Frostwolf

alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
hilfe bei checksummenerstellung674bqstony22.12.04 15:19

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel