Mathias hat geschrieben: Di 3. Jun 2025, 16:57
wen man eine Unit auch in einem Modernen Delphi nutzen will,
Wenn der eigene Quellcode zu allen Delphi-Versionen kompatibel sein soll, könnte man anstatt "String" explizit AnsiString (8-Bit-Grundlage) oder UnicodeString (16-Bit-Grundlage) schreiben.
Mathias hat geschrieben: Di 3. Jun 2025, 16:57
Kann man mit eine Compiler Schalter erzwingen, das der Char garantiert 8Bit hat.
Nein, so pauschal funktioniert das nicht.
Wenn du garantieren kannst, dass deine verwendeten String-Inhalte nur lateinische und westeuropäische Zeichen enthalten (z.B. deutsche Umlaute, französische Akzentzeichen etc.) könntest du mit Ansi-CodePage 1252 arbeiten.
Man kann sich einen eigenen String-Typ mit CodePage 1252 (Westeuropäisch) definieren, aber damit hatte ich zumindest früher mal Probleme, glaube ich mich zu erinnern.
Man kann einen einzelnen String per SetCodePage() in eine bestimmte Codepage konvertieren, z.B. halt CP 1252 = westeuropäisch.
Code: Alles auswählen
function StringToCP1252(const s: AnsiString): RawByteString;
begin
Result := s;
SetCodePage(Result, 1252, true);
end;
Wenn ein Zeichen nicht in Codepage 1252 gehört, wird es als "?" übersetzt.
So kannst du sicher sein, dass westeuropäische Zeichen genau 1 Byte belegen. Das macht aber nur Sinn, wenn du den String wirklich Byte für Byte durchlaufen musst.
Grüße, Jörg