AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Inkompatible Typen: AnsiChar und Char

Inkompatible Typen: AnsiChar und Char

Ein Thema von strom · begonnen am 4. Sep 2016 · letzter Beitrag vom 5. Sep 2016
Antwort Antwort
Seite 2 von 2     12
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.968 Beiträge
 
Delphi 10.4 Sydney
 
#11

AW: Inkompatible Typen: AnsiChar und Char

  Alt 4. Sep 2016, 14:52
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#12

AW: Inkompatible Typen: AnsiChar und Char

  Alt 5. Sep 2016, 13:24
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 s := Edit6.Text; krachen, da s ein Shortstring ist und 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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.349 Beiträge
 
Delphi 10.4 Sydney
 
#13

AW: Inkompatible Typen: AnsiChar und Char

  Alt 5. Sep 2016, 16:45
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];
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#14

AW: Inkompatible Typen: AnsiChar und Char

  Alt 5. Sep 2016, 17:02
Und dann noch statt Length SizeOf verwenden, dann ist man auf der sicheren seite

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
659 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#15

AW: Inkompatible Typen: AnsiChar und Char

  Alt 5. Sep 2016, 17:08
Und dann noch statt Length 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
Fritz Westermann
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#16

AW: Inkompatible Typen: AnsiChar und Char

  Alt 5. Sep 2016, 17:21
Warum über die Länge des Strings laufen, wenn man das Array verarbeitet?

War eher das gemeint?
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.
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.027 Beiträge
 
Delphi 10.3 Rio
 
#17

AW: Inkompatible Typen: AnsiChar und Char

  Alt 5. Sep 2016, 17:31
Berlin 10.1...

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

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

Also alle Meldungen richtig...
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.804 Beiträge
 
Delphi 10.4 Sydney
 
#18

AW: Inkompatible Typen: AnsiChar und Char

  Alt 5. Sep 2016, 17:39
S := Edit1.Text; Wenn S ein Short ist, wird es vom compiler convertiert... Funktioniert aber nur, wenn sich wirklich nur Ansi im Unicodestring befindet.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.027 Beiträge
 
Delphi 10.3 Rio
 
#19

AW: Inkompatible Typen: AnsiChar und Char

  Alt 5. Sep 2016, 17:46
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!
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 22:06 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf