![]() |
StringReplace - Problem mit $00 ?
Moin !
Also entweder habe ich gerade ne Blockade, oder mein Compiler mag mch nimmer. :gruebel:
Delphi-Quellcode:
Wenn ich das ausführe dann sollte hinten das DBDC ersetzt werden durch C0. Aber da passiert rein gar nichts. :cyclops:
function HexStrToString(const value:string):string;
begin SetLength(Result, Length(value) div 2); // es wird halber Platz benötigt if Length(value) > 0 then HexToBin(PChar(value), PChar(Result), Length(value)); end; Procedure .... Whatever .... var DataConvert, Data : String; Const FEND = $C0; //Frame END Const FESC = $DB; //Frame ESCape begin Data := HexStrToString('C01D0D024022F920FF08D60000001901DBDC'); DataConvert := StringReplace(Data, chr($DB) + chr($DC), CHR(FEND), [rfReplaceAll, rfIgnoreCase]); DataConvert := StringReplace(Data, chr($DB) + chr($DD), CHR(FESC), [rfReplaceAll, rfIgnoreCase]); ShowMessage(DataConvert); end; Hab ich hier einen generellen Fehler oder wat is da los? |
Re: StringReplace - chr($DB) + chr($DC) nicht ersetzbar ?!
Moin nochmal ..
Kann es sein das StrngReplace ein Problem mit $00 hat ? Denn das geht nicht: Data := HexStrToString('001901DBDC'); Aber das geht : Data := HexStrToString('1901DBDC'); |
Re: StringReplace - Problem mit $00 ?
Woran erkennst du das StringReplace ein Problem hat?
Eigentlich sollte dieses keine Probleme damit haben, aber deine MessageBox (ShowMessage) hat große Probleme damit :angel2: |
Re: StringReplace - Problem mit $00 ?
Die MessageBox war ja nur damit der Compiler das nicht gleich verwirft.
Ich habe mir das im Debugger angesehen. Und da kann man eben sehen das kein replace statt findet :-( |
Re: StringReplace - Problem mit $00 ?
hmmm :gruebel: ich schau mal, aber eigentlich hatte ich da noch nie Probleme damit (du bist grad in D7?)
PS:
Code:
[add]
Data := HexStrToString('C01D0D024022F920FF08D60000001901DBDC');
DataConvert := StringReplace(Data, chr($DB) + chr($DC), ... DataConvert := StringReplace([b]DataConvert[/b], chr($DB) + ...]); laß mal das rfIgnoreCase weg ... eventuell hat das interne AnsiUpperCase Probleme |
Re: StringReplace - Problem mit $00 ?
Moin !
Zitat:
|
Re: StringReplace - Problem mit $00 ?
Moin Dominik,
einen Workaround kann ich Dir noch anbieten: Ersetze die Werte als String, und wandele anschliessend den String um statt umgekehrt. |
Re: StringReplace - Problem mit $00 ?
OK, das kommt davon, wenn man meißt eine andere Version der Funktionen nutz :oops:
Also Probleme gibt es mit AnsiPos im StringReplace, denn dises nutzt einen PChar und der schneidet bei #0 nunmal ab, darum wird nichts nach einem #0 gefunden. [add] also die legalen Lösungen: schau dir mal andere Implementationen der Funktion an ... z.B. siehe FastStringsProject (oder so) ODER kopier dir aus der SysUtils.pas die Funktion StringReplace raus und ersetze in deiner Kopie das AnsiPos durch Pos. Falls du im Forum etwas suchst, kannst du auch rausfinden wie man die SysUtils neu kompiliert, dann kannst du das auch direkt in der SysUtils ändern :angel: |
Re: StringReplace - Problem mit $00 ?
Moin !
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:52 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