![]() |
Stringbearbeitung - UTF8-Zeichensatz
Hallo DP,
ich habe folgende Probleme. 1. Ein String(ohne Leerzeichen und Zeilenumbrüche) beteht aus Ziffern und Buchstaben, die teilweise HEX-Zahlen darstellen. Es ist bekannt an welcher Position die richtige Inforamtion abgelegt ist und mittels
Delphi-Quellcode:
werden die einzelnen stringteile rauskopiert und in die string-Variablen abgelegt. Danach muss dieser String in HEX-Zahlen unterteilt werden(die HEX-Zahlen sind jeweils zweistellig) und der entstandene HEX-String mit UTF-8-Zeichensatz umgewandelt werden. Die länge des HEX-strings ist immer bekannt.
copy(string, 10,10)
z.B: string-variable: 48415553 string in 2-stellige HEX-Zahlen umgestellt: 48 41 55 53 string decodiert: HAUS Zur dekodierung habe ich die funktion von Lemmy1 aus diesem ![]() folgendes funktioniert nicht, E2010 (string and procedure, untyped pointer or untyped parameter)und E2081(assignment FOR-Loop variable 'i')
Delphi-Quellcode:
stelle := Copy(gesamt_text,24,30);
for i:= 2 to 8 do begin stelle := Insert(' ', stelle, i); i := i+3; end; 2. Es ist bekannt, dass im string, der zB. 120 Zeichen lang ist, Information befindet. Diese ist von Nullen umgeben, die muss man löschen. Das ist kein Problem, jedoch befinden sich da die HEX-Zahlen, wie zB 31 00 11, die nicht benötigt werden. Die stehen vor der eigentlicher Information. zB: z.B: string-variable: 00000011ED484155530000 string in 2-stellige HEX-Zahlen umgestellt: 48 41 55 53 string decodiert: HAUS Könnt ihr mir vllt weiterhelfen? MfG Konstantin |
AW: Stringbearbeitung - UTF8-Zeichensatz
![]() Tipp: Schau mal auf den nicht vorhandenen Result-Typ. Und das "i := i+3;" : Man darf in einer For-Schleife die Schleifenvariable nicht verändern. Entweder du rechnest das überall direkt hoch (
Delphi-Quellcode:
), oder du mußt das z.B. als While-Schleife lösen.
for i := 0 to 3 do Irgendwas(i*3);
|
AW: Stringbearbeitung - UTF8-Zeichensatz
Delphi-Quellcode:
kann nicht funktionieren, da Insert eine Prozedur ist. Zum Rest: :gruebel:, was ist eigentlich das Problem? Du hast einen String, der vorne und hinten aus "0" besteht und in dem sich zwischen diesen Informationen befinden, die Du benötigst, soweit richtig? Filtert man die führenden und abschließenden "0" weg, enthält der resultierende String immer noch irrelevante Stellen, auch richtig? Und diese willst Du nun auch beseitigen und den verbleibenden String codieren, stimmt' s?
Stelle := {System.}Insert(...)
|
AW: Stringbearbeitung - UTF8-Zeichensatz
@himitsu
Danke, mit while geht es genauso gut. Ich werde wohl diese Schleifenart nehmen. Das Problem der Aufteilung des strings in HEX-Zahlen besteht aber noch. Ich verstehe nicht ganz, was der Result liefern soll... @DeddyH Ja, genau das möchte ich. Mit
Delphi-Quellcode:
beseitige ich die Nullen. Ich brauche nur die HEX, die Buchstaben, Zahlen und Leerzeichen darstellen aus dieser
StringReplace(stelle, '00','',[rfReplaceAll]);
![]() |
AW: Stringbearbeitung - UTF8-Zeichensatz
Mit
Delphi-Quellcode:
bekommt man
StrToInt( '$FF' )
Delphi-Quellcode:
(in Hex
255
Delphi-Quellcode:
) als Integer zurück.
$FF
Hilft dir das weiter ;) |
AW: Stringbearbeitung - UTF8-Zeichensatz
Zitat:
StrToInt geht ja nur bis maximal 8 Byte am Stück (Int64) ... für mehr muß man es zerlegen oder man verwendet z.B. HexToBin. (IntToHex/Format / BinToHex) |
AW: Stringbearbeitung - UTF8-Zeichensatz
Zitat:
|
AW: Stringbearbeitung - UTF8-Zeichensatz
Nicht unbedingt die performanteste Lösung, als Ansatz soll es aber erst einmal reichen:
Delphi-Quellcode:
function Irgendwas(const s: string): string;
var i, iCharCode: integer; CharPair: string; begin Result := ''; i := 1; while i < Length(s) - 1 do begin CharPair := Copy(s, i, 2); if TryStrToInt('$' + CharPair, iCharCode) then if (iCharCode >= Ord('A')) and (iCharCode <= Ord('Z')) then Result := Result + Chr(iCharCode); inc(i, 2); end; end; |
AW: Stringbearbeitung - UTF8-Zeichensatz
Zitat:
![]() |
AW: Stringbearbeitung - UTF8-Zeichensatz
Mit HexToBin in einen UTF8String kopieren.
Oder in ein TBytes und dann via TEncoding in den Unicode-String. (ab Delphi 2009) Aber warum eigentlich UTF8, wenn dort sowieso nur Latin1 (ISO 8859-1) drin steckt? Zitat:
Code:
wird zu
...0
0... ...300D0A30...
Delphi-Quellcode:
...3D0A30...
...= 0... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:57 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