AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language AnsiString zu String zuweisen ohne Konvertierung?
Thema durchsuchen
Ansicht
Themen-Optionen

AnsiString zu String zuweisen ohne Konvertierung?

Ein Thema von Rolf Frei · begonnen am 7. Dez 2019 · letzter Beitrag vom 10. Dez 2019
 
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
496 Beiträge
 
Delphi 12 Athens
 
#7

AW: AnsiString zu String zuweisen ohne Konvertierung?

  Alt 7. Dez 2019, 18:20
Mit String bzw. UnicodeString geht das so leider nicht, weil hier eine Konvertierung IMMER automatisch stattfindet (Deshalb sind String -Objekte auf der Linken Seite auch immer ReadOnly).
Das ist wegen der Referenzzählung notwendig, damit du keine Speicherlöcher bekommst. Allerdings gibt es hier ein paar möglichkeiten, das zu umgehen.
Der einfachste Weg wäre es, Statt String bzw. UnicodeString einen anderen Typ für die Zuweisung zu verwenden.
Ich würde einen Zeigertypen wie PAnsiChar oder alternativ PByte empfehlen.

Delphi-Quellcode:
var
  a: AnsiString;
  s: String;
begin
  a := #$95;
// s := a;
  PAnsiChar(s) := PAnsiChar(a);
  ShowMessage((Ord(s[1]).ToHexString)); // Gibt $95 zurück
Allerdings bekommst du so für das zweite, dritte, vierte, ... Zeichen der Zeichenkette nur Salat heraus, da die Zeichen ja andere Bytegrößen haben. Das kannst du durch eine einfache Zuweisung nicht beheben, da du jedes Zeichen auf Unicode erweitern musst.

KLEINE ERGÄNZUNG: So könntest du es Implementieren, falls du die Werte Kopieren willst:
Delphi-Quellcode:
var
  a: AnsiString;
  s: String;
  pa: PAnsiChar;
  ps: PChar;
begin
  a := #$95#22;
  SetLength(s, length(a));
  pa := PAnsiChar(a);
  ps := PChar(s);
  while pa^ <> #0 do
  begin
    PAnsiChar(ps)^ := pa^;
    Inc(pa);
    Inc(ps);
  end;
  ShowMessage((Ord(s[2]).ToHexString)); // Gibt $16 zurück
end;
Dennis

Geändert von Dennis07 ( 7. Dez 2019 um 18:32 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:38 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