Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Inkompatible Typen: AnsiChar und Char (https://www.delphipraxis.net/190148-inkompatible-typen-ansichar-und-char.html)

himitsu 4. Sep 2016 13:52

AW: Inkompatible Typen: AnsiChar und Char
 
Ohh, übersehn.

Diese ShortStrings, also ShortString und String[123] sind immernoch ANSI-Records ... da hatte sich mit Delphi 2009 nix dran geändert.
Nur der LongString-Typ "String" wurde von AnsiString auf UnicodeString geändert.

Also ist diese Meldung natürlich korrekt, wenn man hier einen Char (sein D2009 ein WideChar) versucht an einen AnsiChar zuzuweisen.

p80286 5. Sep 2016 12:24

AW: Inkompatible Typen: AnsiChar und Char
 
Zitat:

Zitat von strom (Beitrag 1346713)
Delphi-Quellcode:
    SL := TStringList.Create;
  try
    SL.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Password.dat');
    if SL.Count>0 then
      Edit6.Text:=SL[0];
        s := Edit6.Text;
    for y := 1 to Length(s) do s[y] := Char(23 xor Ord(c[y])); // Hier ist das Problem

Ich weiß leider nicht wies in Berlin um irgendwelche Zauberei steht aber meiner Meinung nach, sollte es in
Delphi-Quellcode:
s := Edit6.Text;
krachen, da
Delphi-Quellcode:
s
ein Shortstring ist und
Delphi-Quellcode:
Edit1.Text
eine Widechar.
Ich würde gleich einen Zeiger übergeben, der als PBytearray agiert,
(ich Liebe dieses verschämte herumhampeln um Char/WideChar) denn wie an anderer Stelle schon einmal jemand schrieb, es werden Bytes und keine Chars verschlüsselt.

Gruß
K-H

Blup 5. Sep 2016 15:45

AW: Inkompatible Typen: AnsiChar und Char
 
Wenn man einen String schon als Bytearray verarbeitet, kann man auf Konvertierung auch ganz verzichten:
Delphi-Quellcode:
for y := 1 to Length(s) do
  c[y] := 23 xor c[y];

p80286 5. Sep 2016 16:02

AW: Inkompatible Typen: AnsiChar und Char
 
Und dann noch statt
Delphi-Quellcode:
Length
Delphi-Quellcode:
SizeOf
verwenden, dann ist man auf der sicheren seite

Gruß
K-H

Fritzew 5. Sep 2016 16:08

AW: Inkompatible Typen: AnsiChar und Char
 
Zitat:

Zitat von p80286 (Beitrag 1346857)
Und dann noch statt
Delphi-Quellcode:
Length
Delphi-Quellcode:
SizeOf
verwenden, dann ist man auf der sicheren seite

Das geht aber in die Hose. Sizeof(Shortstring) liefert die Länge des Buffers nicht die Länge des darin enthaltenen Strings

Fritz

nahpets 5. Sep 2016 16:21

AW: Inkompatible Typen: AnsiChar und Char
 
Warum über die Länge des Strings laufen, wenn man das Array verarbeitet?

War eher das gemeint?
Delphi-Quellcode:
for y := 1 to SizeOf(c) do c[y] := 23 xor c[y];
Nur, da c absolut an s liegt und s irgendwas zwischen 1 und 255 Zeichen enthalten kann, wäre ein SizeOf(c) nicht wirklich hilfreich, da man ja dann auch Bytes verarbeitet, die im aktuellen String nicht belegt sind.

Also dürfte Length(s) hier schon die sinnvollere Variante sein.

Mavarik 5. Sep 2016 16:31

AW: Inkompatible Typen: AnsiChar und Char
 
Berlin 10.1...

Strings haben WORDs und nicht bytes!
Das gilt auf für Stringlisten!

Delphi-Quellcode:
S := Edit1.Text;
Wenn S ein Short ist, wird es vom compiler convertiert...

Also alle Meldungen richtig...

mkinzler 5. Sep 2016 16:39

AW: Inkompatible Typen: AnsiChar und Char
 
Delphi-Quellcode:
S := Edit1.Text; Wenn S ein Short ist, wird es vom compiler convertiert...
Funktioniert aber nur, wenn sich wirklich nur Ansi im Unicodestring befindet.

Mavarik 5. Sep 2016 16:46

AW: Inkompatible Typen: AnsiChar und Char
 
Zitat:

Zitat von mkinzler (Beitrag 1346870)
Delphi-Quellcode:
S := Edit1.Text; Wenn S ein Short ist, wird es vom compiler convertiert...
Funktioniert aber nur, wenn sich wirklich nur Ansi im Unicodestring befindet.

Convertiert bedeutet keine Compiler-Fehlermeldung... "nur ne Warnung"... Vom Inhalt hat keiner gesprochen! :stupid:


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:04 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz