![]() |
Chr liefert Müll
Hallo zusammen,
ich bin gerade dabei mit StrToHex und HexToStr hier aus dem Forum zu arbeiten. Dabei ist mir aufgefallen, dass diese Funktionen manchmal Müll zurückliefern. Ich habe das Gefühl, sobald ich einen Hexwert mit Null am Anfang (also 00 - 09) übergebe, bekomme ich anstatt dem Zeichen ein #00 - #09 zurück. Woran kann das liegen. Wäre über jede Hilfe dankbar. Grüße ddcool |
Re: Chr liefert Müll
Moin ddcool,
#00 bis #09 sind doch auch Zeichen, nur nicht darstellbar (das betrifft alle zeichen von 0-31dez bzw. $00-$1F) |
Re: Chr liefert Müll
Moin,
insbesondere sind $#0..$#9 identisch mit #0..#9 - aus dem gleichen Grund, aus dem die ersten beiden Ziffern in allen Zahlsystemen identisch sind und aus dem du eine Zahl im Oktalsystem ohne einen Hinweis nicht von einer Zahl im Dezimalsystem unterscheiden kannst. Freundliche Grüße |
Re: Chr liefert Müll
Hmm das ist ja doof.
Das Problem ist, dass ich einen String per Blowfish + SHA-512 verschlüssle. Danach wird der String in Hex gewandelt, um ihn per Text vernünftig verschicken zu können. Auf der anderen Seite wird dann der Hex-String wieder in einen normalen String gewandelt und entschlüsselt. Da ich aber bei diesen bestimmten Zeichen (die ja nich darstellbar sind) nur ein #0 - #9 als Rückwandlung bekomme, klappt die Entschlüsselung auch nicht mehr. Was machen? Grüße ddcool |
Re: Chr liefert Müll
Das Problem sollte nur bestehen, wenn du irgendwo nach der Rückwandlung Hex -> String diesen String als PChar() typecastest oder nutzt. Nur dann wird die #0 als Endemarkierung interpretiert, bei einem String an sich hätte er keine Bedeutung.
|
Re: Chr liefert Müll
Also ich habe jetzt hier nochmal die Funktion. So mache ich das momentan. Was muss ich denn da ändern, damit mir das korrekte Ergebnis zurückgeliefert wird?
Delphi-Quellcode:
Danke & Grüße
Function HexToStr(s: String): String;
Var i: Integer; Begin Result:=''; i:=1; While i<Length(s) Do Begin Result:=Result+Chr(StrToIntDef('$'+Copy(s,i,2),0)); Inc(i,2); End; End; ddcool |
Re: Chr liefert Müll
Du darfst nie Strings verwenden, wenn du mit binären Daten arbeitest, da bei diesen Schluss ist, sobald #0 drin vorkommt. Nimm
![]() |
Re: Chr liefert Müll
Genau umgekehrt, Mario.
Die Funktion HexToStr() funktioniert, wenn der übergebene Hex-String eine gerade Länge hat. Erst die unbedachte Verwendung von AnsiString in anderen Funktionen mit implizitem oder explizitem Cast nach PChar führen zum unerwarteten Datenverlust. Freundliche Grüße |
Re: Chr liefert Müll
Bei der Funktion da oben, wenn er damit einen String "decodieren" will, der eigentlich ein binärer Datenstrom ist (und so klang's mir), wird er mit String als Rückgabewert imho nicht glücklich.
|
Re: Chr liefert Müll
Ja nur genau das ist eben nicht der Fall,
ich übergebe ein HexString der eine gerade länge hat und zwar: C8DCC34404C32C2C606769BE4F4201 Bekomme aber bei 04 und 01 anstatt eines Zeichens nur ein #4 und #1 in den String geschrieben (so zeigt es mir der Debugger). Grüße ddcool |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:49 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