Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Chr(224) Delphi 2007 <-> Delphi 2009 (https://www.delphipraxis.net/123513-chr-224-delphi-2007-delphi-2009-a.html)

ImpactMG 3. Nov 2008 16:12


Chr(224) Delphi 2007 <-> Delphi 2009
 
Hallo,

ich habe das Problem, dass Chr(xx) unter Delphi 2009 etwas anderes liefert als Chr(xx) unter Delphi 2007.

Delphi-Quellcode:
var
  c : AnsiChar;
begin
  c := AnsiChar(Chr(224));
  ShowMessage(c);
end;
Gibt es eine Möglichkeit unter Delphi 2009 den gleichen Wert zu einer Zahl zu generieren, die Chr() in Delphi 2007 zurückgegeben hat?

Das eigentliche Problem das ich habe sind Daten die mit der Funktion:

Delphi-Quellcode:
function BinaryStrToHexStr(aBinary : AnsiString) : AnsiString;
var
  i : Integer;
begin
  Result := '';
  for i := 1 to Length(aBinary) do
    Result := Result + IntToHex(Ord(aBinary[i]), 2);
end;
geschrieben, und nun mit der Funktion:

Delphi-Quellcode:
function HexStrToBinaryStr(aHex : AnsiString) : AnsiString;
var
  i : Integer;
begin
  Result := '';
  for i := 1 to (Length(aHex) div 2) do begin
    Result := Result + Chr(:= StrToint('$' + Copy(aHex,i*2-1,2)));
  end;
end;
gelesen werden sollen. Es handelt sich um verschlüsselte Texte.

mkinzler 3. Nov 2008 16:22

Re: Chr(224) Delphi 2007 <-> Delphi 2009
 
Welchen Typ hat aHex?

Der.Kaktus 3. Nov 2008 16:25

Re: Chr(224) Delphi 2007 <-> Delphi 2009
 
Zitat:

Zitat von mkinzler
Welchen Typ hat aHex?

ist ein Funktionparameter ;-) (Ansistring)

mkinzler 3. Nov 2008 16:27

Re: Chr(224) Delphi 2007 <-> Delphi 2009
 
Man heute bin ich blind :oops:

Assertor 3. Nov 2008 16:32

Re: Chr(224) Delphi 2007 <-> Delphi 2009
 
Zitat:

Zitat von ImpactMG
ich habe das Problem, dass Chr(xx) unter Delphi 2009 etwas anderes liefert als Chr(xx) unter Delphi 2007.

Delphi-Quellcode:
var
  c : AnsiChar;
begin
  c := AnsiChar(Chr(224));
  ShowMessage(c);
end;

Bei mir liefert dieser Source unter D2006 und D2009 beide male den Accent grave (à). Da muß an anderer Stelle etwas nicht stimmen...

Gruß Assertor

Zacherl 3. Nov 2008 16:36

Re: Chr(224) Delphi 2007 <-> Delphi 2009
 
Vielleicht trotzdem ähnliches Problem wie bei mir damals:
http://www.delphipraxis.net/internal...nicode+zacherl

ImpactMG 3. Nov 2008 19:02

Re: Chr(224) Delphi 2007 <-> Delphi 2009
 
das ist ja lustig!

bei mir liefert ein Testprojekt mit 1 form und einem button und:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  c : AnsiChar;
begin

  c := Chr(224);
  ShowMessage(c);
end;
* unter Delphi 2007 ein 'ŕ'
* unter Delphi 2009 ein 'a'. im Debugger wird aber Chr(224) als 'à' ausgewertet

kann sich (oder mir ;-) ) das jemand erklären?

SirThornberry 3. Nov 2008 19:43

Re: Chr(224) Delphi 2007 <-> Delphi 2009
 
ja, ich kann es mir erklären. D2009 ist glaub ich Unicodefähig und chr liefert dir dann vielleicht das ganze als Unicode zurück. Immerhin ist chr eine Funktion. vielleicht klappt es ja wenn du die Zahl direkt castest also char(zahl) sofern sizeof(char) noch 1 ist.

mkinzler 3. Nov 2008 19:45

Re: Chr(224) Delphi 2007 <-> Delphi 2009
 
Nein Chr liefert auch in D2009 einen Ansistring zurück

Uwe Raabe 3. Nov 2008 20:04

Re: Chr(224) Delphi 2007 <-> Delphi 2009
 
Zitat:

* unter Delphi 2007 ein 'ŕ'
* unter Delphi 2009 ein 'a'. im Debugger wird aber Chr(224) als 'à' ausgewertet

Also bei mir liefert sowohl Delphi 2007, als auch Delphi 2009 ein "á" (auch im Debugger)! Ist im Übrigen das gleiche, was auch #224 liefert - in beiden Versionen.

Frage: Warum nimmst du nicht gleich HexToBin/BinToHex aus Classes.pas?

Hawkeye219 3. Nov 2008 20:39

Re: Chr(224) Delphi 2007 <-> Delphi 2009
 
Hallo,
Zitat:

Zitat von mkinzler
Nein Chr liefert auch in D2009 einen Ansistring zurück

Die Standardfunktion Chr sollte in Delphi 2009 ein Unicode-Zeichen liefern:

Delphi-Quellcode:
var
  ch : Char;
begin
  ch := Chr($0815);
  ShowMessage (IntToHex(Ord(ch), 4));
end;
Zugegeben - die Hilfedatei ist in diesem Punkt leider keine große Hilfe...

Gruß Hawkeye

Uwe Raabe 3. Nov 2008 20:52

Re: Chr(224) Delphi 2007 <-> Delphi 2009
 
Zitat:

Zitat von Hawkeye219
Hallo,
Zitat:

Zitat von mkinzler
Nein Chr liefert auch in D2009 einen Ansistring zurück

Die Standardfunktion Chr sollte in Delphi 2009 ein Unicode-Zeichen liefern:

Delphi-Quellcode:
var
  ch : Char;
begin
  ch := Chr($0815);
  ShowMessage (IntToHex(Ord(ch), 4));
end;

Beides ist richtig! Je nach Ziel liefert Chr entweder einen 1- oder 2-Byte Wert zurück. Im Falle eines 1-Byte Ziels und eines 2-Byte Parameter gibt es dann auch eine Warnmeldung.

mkinzler 3. Nov 2008 20:53

Re: Chr(224) Delphi 2007 <-> Delphi 2009
 
Liste der Anhänge anzeigen (Anzahl: 1)
Die IDE auch nicht

SirThornberry 3. Nov 2008 21:00

Re: Chr(224) Delphi 2007 <-> Delphi 2009
 
wie sieht es aus wenn man castet mit char(zahl) anstelle die compilermagic funktion chr(zahl) zu verwenden?

ImpactMG 4. Nov 2008 08:59

Re: Chr(224) Delphi 2007 <-> Delphi 2009
 
Danke für die Tips.

BinToHex und HexToBin liefern gerau das gleiche Ergebnis wie meine Funktionen.

Habe inzwischen den Grund für das Problem gefunden, allerdings noch keine Lösung.

Auf meinem System war die Defaultcodepage auf Polnisch eingestellt (Systemsteuerung/Regions- und Sprachoptionen/Erweitert/Sprachversion für nicht-Unicodefähige Programme). Wenn ich sie auf Deutsch zurückstelle, bekomme ich wie Ihr ein 'á'.

Chr arbeitet also Systemcodepage-abhängig. Lösung mit Casten werde ich ausprobieren

Uwe Raabe 4. Nov 2008 19:40

Re: Chr(224) Delphi 2007 <-> Delphi 2009
 
Zitat:

Zitat von ImpactMG
BinToHex und HexToBin liefern gerau das gleiche Ergebnis wie meine Funktionen.

Hatte ich auch nicht anders erwartet, sollte nur Arbeit sparen...

Zitat:

Zitat von ImpactMG
Auf meinem System war die Defaultcodepage auf Polnisch eingestellt (Systemsteuerung/Regions- und Sprachoptionen/Erweitert/Sprachversion für nicht-Unicodefähige Programme). Wenn ich sie auf Deutsch zurückstelle, bekomme ich wie Ihr ein 'á'.

Chr arbeitet also Systemcodepage-abhängig.

Ich denke eher, daß die Umwandlung in den UnicodeString das CodePage-Problem hat. Aber du kannst die verwendete CodePage für AnsiStrings ja im Programm festlegen:

Delphi-Quellcode:
type
  GermanString = type AnsiString (1252);
  PolishString = type AnsiString (1250);
var
  German: GermanString;
  Polish: PolishString;
begin
  German := chr(224);
  Polish := chr(224);
  ShowMessage(German + '<>' + Polish);
end;
Wird nur AnsiString angegeben, verwendet Delphi die aktuelle Windows-CodePage. Leider geht das nicht mit AnsiChar, nur mit AnsiString;


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:32 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