Delphi-PRAXiS

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)

strom 4. Sep 2016 12:09

Inkompatible Typen: AnsiChar und Char
 
Hallo,
möchte das codierte Passwort wieder in klartext darstellen.
Jetzt kommt die fehlermeldung Inkompatible Typen AnsiChar und Char?


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

nahpets 4. Sep 2016 12:39

AW: Inkompatible Typen: AnsiChar und Char
 
Wie sind denn y, s und c definiert?

strom 4. Sep 2016 12:41

AW: Inkompatible Typen: AnsiChar und Char
 
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
 i :integer;
 SL: TStrings;
 s: String[255];
 c: array[0..255] of Byte absolute s;

nahpets 4. Sep 2016 12:43

AW: Inkompatible Typen: AnsiChar und Char
 
Versuchs mal mit
Delphi-Quellcode:
  for y := 1 to Length(s) do s[y] := Chr(23 xor Ord(c[y]));
Das "Gegenstück" von Ord ist Chr und nicht Char.

himitsu 4. Sep 2016 12:50

AW: Inkompatible Typen: AnsiChar und Char
 
Die wichtigsten Infos hat jemand vergessen:

Welche Delphi-Verison
und wie ist S deklariert?

strom 4. Sep 2016 12:52

AW: Inkompatible Typen: AnsiChar und Char
 
leider bleibt die Fehlermeldung gleich :-(

Starter Version Berlin 10.1

nahpets 4. Sep 2016 13:01

AW: Inkompatible Typen: AnsiChar und Char
 
Irgendwie erscheint mir das Ganze nicht so recht sinnvoll.

s ist ein String und c ist ein Array an der Adresse von s.

Damit sind s und c inhaltlich gleich.

Eigentlich hätte ich hier eher sowas erwartet:
Delphi-Quellcode:
for y := 1 to Length(s) do s[y] := Chr(23 xor Ord(s[y]));

strom 4. Sep 2016 13:09

AW: Inkompatible Typen: AnsiChar und Char
 
ja, werde noch ein wenig testen!
danke für Eure Hilfe!

himitsu 4. Sep 2016 13:21

AW: Inkompatible Typen: AnsiChar und Char
 
Zitat:

Zitat von nahpets (Beitrag 1346725)
s ist ein String

Jain.

Das wurde immernoch nicht gesagt, aber nach der Berlin-Info denke ich fast an einen AnsiString. :roll:

nahpets 4. Sep 2016 13:30

AW: Inkompatible Typen: AnsiChar und Char
 
Zitat:

Zitat von himitsu (Beitrag 1346729)
Zitat:

Zitat von nahpets (Beitrag 1346725)
s ist ein String

Jain.

Das wurde immernoch nicht gesagt, aber nach der Berlin-Info denke ich fast an einen AnsiString. :roll:

Laut Post #3 ist's
Delphi-Quellcode:
s : String[255];
Ist das jetzt unter Berlin anders als unter Delphi 7? Kenne nur das "alte" Delphi ;-)

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 12:57 Uhr.

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