![]() |
Re: XOR Verknüpfung, wie?
Also ich bin nun fast fertig. Nur die Ergebnisse hauen noch nicht so hin
wieso kann ich denn nicht
Delphi-Quellcode:
Wieso bringt der da einen Fehler? Irgendsoetwas mir Array.vString:=GetString(); strSN:=GrobPath1(vString); intSN:=StrToInt(strSN); Ergebnis:= IntToHex(ord(intSN[1]),2) xor IntToHex(ord(intSN[2]),2).... WriteString(); Checksum:=IntToHex(Ergebnis,2); Wichtig ist, dass ich den die Zahl(123456) die ja ein String ist in die einzelnen Ziffern aufteilt und dann diese einzelnen Ziffern in einen Hexwert(Ascii) umwandelt und dann xor verknüpfe. Habt Ihr da ne Lösung? |
Re: XOR Verknüpfung, wie?
Danke Klaus!
|
Re: XOR Verknüpfung, wie?
Bei
result := IntToHex(dummy); zeigt er den Fehler "Es gibt keine überladene Funktion von IntToHex, die man mit diesen Argumenten aufrufen kann" Was bedeutet das? Geht das garnicht? |
Re: XOR Verknüpfung, wie?
das bedeutet das deine parameterliste nicht mit der übereinstimmt die erwartet wird (du übergibst einen parameter zu wenig)
|
Re: XOR Verknüpfung, wie?
uups
Delphi-Quellcode:
ein Byte liefert zwei Digits zurück.
result := IntToHex(dummy,2);
Grüße Klaus |
Re: XOR Verknüpfung, wie?
OK. Probiere es nochmal. Dank Dir!!!
|
Re: XOR Verknüpfung, wie?
Vielen Dank Klaus01. Das mit der Seriennummer klappt schon.
Aber die Seriennummer alleine ergibt nicht alleine die Checksumme. Die komplette Checksumme wird aus <STX>OWE_509_Seriennummer_ _ steht für Leerzeichen (in Hex=20) HEX O = 4F W = 57 E = 45 _ = 20 5 = 35 0 = 30 9 = 39 _ = 20 Seriennummer _ = 20 Das OWE_509_ bleibt ja immer gleich. Aber wie kann ich das in diese Schleife mit einbringen? Oder gibts da ne andere Möglichkeit? Danke für alles! |
Re: XOR Verknüpfung, wie?
Zitat:
entweder übergiebst Du das "OWE 509 " immer mit an die Funktion oder Du baust es dort einfach ein:
Delphi-Quellcode:
function checksum(SNr:String):String;
VAR i:Byte; dummy:Byte; begin SNr := 'OWE 509 ' + SNr; // OWE__509_ wird vor jede Seriennummer gesetzt. dummy:=ord(SNr[1] XOR ord (SNr[2]); for i:=3 to length(SNr) DO begin dummy:=dummy XOR ord(SNr[i]); end; result := IntToHex(dummy); end; |
Re: XOR Verknüpfung, wie?
Die Routine von Klaus versagt bei Strings mit einer Länge von weniger als 2 Zeichen:
Delphi-Quellcode:
Auch wenn der Fall bei Dir vielleicht nicht auftritt, irgendwann willst du die Routine vielleicht nochmal verwenden, und spätestens dann hast Du vergessen, das sie nicht uneingeschränkt funktioniert.
Function CheckSum (Const aString : String) : String;
Var i : Integer; Begin If Length (aString)=0 Then r := 0 Else Begin r := Ord (aString[1]); For i:=2 To Length (aString) Do r := r xor Ord (aString[i]); End; Result := IntToHex (r,2); End; Ich implementiere solche Basisfunktionen immer so, das sie immer zu einem Ergebnis führen. Dann bin ich auf der sicheren Seite und ich habe mindestens einen Fehler weniger :zwinker: @Klaus01: Übergebe einfach das gesamte Telegram (ab dem <STX>), dann wird doch auch die komplette checksum gebildet. Bist du Dir Sicher, das Du die Checksumme in Hex brauchst? |
Re: XOR Verknüpfung, wie?
Hai alzaimer,
wo kommt denn in deiner Funktion das r her? ;-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:43 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz