Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Chr liefert Müll (https://www.delphipraxis.net/113183-chr-liefert-muell.html)

ddcool 4. Mai 2008 02:37


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

Christian Seehase 4. Mai 2008 03:43

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)

marabu 4. Mai 2008 07:09

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

ddcool 4. Mai 2008 11:04

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

Muetze1 4. Mai 2008 13:43

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.

ddcool 4. Mai 2008 20:26

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:
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;
Danke & Grüße

ddcool

Nuclear-Ping 4. Mai 2008 21:21

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 Delphi-Referenz durchsuchenPChar.

marabu 4. Mai 2008 21:26

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

Nuclear-Ping 4. Mai 2008 21:29

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.

ddcool 4. Mai 2008 21:32

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.
Seite 1 von 2  1 2      

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