title image


Smiley Re: Intel ASCII-Code Checksumme berechnen? siehe Text...
Frage:Wer weiß, wie man aus einem Datensatz (z.B. ": 01 0010 00 55") per VB die Checksumme errechnen kann?? (Ergebnis müsste 9A sein).Ich habe eine englische Erklärung dafür - komme aber nicht klar damit :-((Hier die Erklärung:Record Marc ":" = 1 ByteRecord length = 1 ByteLoad Offset = 2 BytesRecord Type = 1 ByteData or Info = n Bytes (wie unter Record length vorgegeben!)Checksumme = 1 byteChecksum:The two´s complement of the 8-bit Bytes that result from converting each pair of ASCII hexadecimal digits to one Byte of binary, and including the Record Length firld to and includingthe last Byts of the Data/Info filed. Therefore, the sum of all the ASCCI pairs in a record after converting to binary, from the Record Length firld to and including the Checksum field, is zero....ob mir da einer helfen kann??!?

Antwort:Hallo "der aktuelle", folgender Code erledigt das:Option Explicit Sub Main()    Debug.Print IntelChecksum(": 01 0010 00 55")End Sub'-------------------------------------------------- Function IntelChecksum(ByVal sData As String) As String    ' Erwartet einen String im Intel - ASCII Format    ' und gibt die Prüfsumme aus     ' Aufruf z.B.:    ' Debug.Print IntelChecksum(": 01 00 10 00 55")     Dim i As Integer     ' Alle Leerzeichen entfernen    Do While InStr(sData, " ")        sData = Replace(sData, " ", vbNullString)    Loop     ' Der String muß mit einem Doppelpunkt beginnen    If Left$(sData, 1) <> ":" Then        Err.Raise 1001, "IntelChecksum", _                  "Der Datensatz muß mit einem Doppelpunkt (:) beginnen."    End If     ' Die Hexziffern müssen Paarweise vorhanden sein,    ' d.h. die Anzahl muß gerade sein.    sData = Mid$(sData, 2)    If Len(sData) Mod 2 Then        Err.Raise 1001, "IntelChecksum", _                  "Der Datensatz muß aus einer " & _                  "geraden Anzahl von Hex-Ziffern bestehen."    End If     ' Die Paare werden addiert:    ' für 01 00 10 00 55 also:    ' &H01 + &H00 + &H10 + &H00 + &H55 = &H66    Dim iBuffer As Integer    For i = 1 To Len(sData) Step 2        iBuffer = (iBuffer + CInt("&H" & Mid$(sData, i, 2))) Mod 256    Next     ' Zweierkomplementbildung:    ' & H66 -> FF99 + 1 = FF9A    iBuffer = Not iBuffer    iBuffer = iBuffer + 1     ' Oder ganz simpel:    ' iBuffer = - iBuffer     Dim sReturnValue As String    sReturnValue = Hex(iBuffer)     ' Wir brauchen nur die beiden rechten Ziffern:    sReturnValue = Right$(sReturnValue, 2)     ' Voila!    IntelChecksum = sReturnValueEnd Function'-------------------------------------------------- Zum Thema "Zweierkomplement (engl. "two´s complement") empfehle ich Dir, einen anderen Beitrag von mir ("Rechnerinterne Zahlendarstellung") einmal zu studieren.
Thomas Prötzsch

geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: