AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Verwirrung bei Chr und AnsiChar

Ein Thema von SebastianZ · begonnen am 6. Apr 2017 · letzter Beitrag vom 7. Apr 2017
Antwort Antwort
Seite 1 von 2  1 2      
SebastianZ

Registriert seit: 23. Jul 2009
89 Beiträge
 
Delphi 11 Alexandria
 
#1

Verwirrung bei Chr und AnsiChar

  Alt 6. Apr 2017, 14:38
Delphi-Version: 10 Berlin
Hallo zusammen,

ich hab ein leichtes Verständnisproblem, vielleicht kann mir ja wer auf die Sprünge helfen.

Warum ist Chr(158) ungleich AnsiChar(158), aber Chr(160) ist gleich AnsiChar(160)

Chr liefert Char zurück, und die ersten 256 Zeichen sollten bei Char und AnsiChar ident sein?


Habs anhand einer Konsole kurz mal durchprobiert.
Delphi-Quellcode:
begin
  try
    writeLn(100);
    if AnsiChar(100) = Char(100) then WriteLn('ja')
    else WriteLn('nein');
//ja

    writeLn(155);
    if AnsiChar(155) = Char(155) then WriteLn('ja')
    else WriteLn('nein');
//nein

    writeLn(156);
    if AnsiChar(156) = Char(156) then WriteLn('ja')
    else WriteLn('nein');
//nein

    writeLn(157);
    if AnsiChar(157) = Char(157) then WriteLn('ja')
    else WriteLn('nein');
//nein

    writeLn(158);
    if AnsiChar(158) = Char(158) then WriteLn('ja')
    else WriteLn('nein');
//nein

    writeLn(159);
    if AnsiChar(159) = Char(159) then WriteLn('ja')
    else WriteLn('nein');
//nein

    writeLn(160);
    if AnsiChar(160) = Char(160) then WriteLn('ja')
    else WriteLn('nein');
//ja

    ReadLn;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Verwirrung bei Chr und AnsiChar

  Alt 6. Apr 2017, 14:43
Zitat:
Chr liefert Char zurück, und die ersten 256 Zeichen sollten bei Char und AnsiChar ident sein?
Eigentlich nur bei alten Delphiversionen und auch nur die ersten 128 (ANSI) der 2 Teil ist abhängig von der Codepage.
Char bei den Unicodeversionen ist ein WideChar also 16Bit, bei denen die ersten 7 Bit mit den ersten 7Bit von AnsiChar identisch sind. Die letzen 8 Bits (welche es bei AnsiChar ja nicht gibt, da nur 8Bit) sind dann 0.
Markus Kinzler
  Mit Zitat antworten Zitat
SebastianZ

Registriert seit: 23. Jul 2009
89 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Verwirrung bei Chr und AnsiChar

  Alt 6. Apr 2017, 15:37
Zitat:
Chr liefert Char zurück, und die ersten 256 Zeichen sollten bei Char und AnsiChar ident sein?
Eigentlich nur bei alten Delphiversionen und auch nur die ersten 128 (ANSI) der 2 Teil ist abhängig von der Codepage.
Char bei den Unicodeversionen ist ein WideChar also 16Bit, bei denen die ersten 7 Bit mit den ersten 7Bit von AnsiChar identisch sind. Die letzen 8 Bits (welche es bei AnsiChar ja nicht gibt, da nur 8Bit) sind dann 0.
Danke für die Antwort.

Damit ist mir aber immer noch nicht klar, warum 160 dann wieder gleich ist

Außerdem decken sich deine Aussage nicht mit dem DocWiki:
http://docwiki.embarcadero.com/Libra...ystem.WideChar
Zitat:
... Die ersten 256 Zeichen des Unicode-Zeichensatzes entsprechen den ANSI-Zeichen...
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.443 Beiträge
 
Delphi 12 Athens
 
#4

AW: Verwirrung bei Chr und AnsiChar

  Alt 6. Apr 2017, 15:47
Zitat:
... Die ersten 256 Zeichen des Unicode-Zeichensatzes entsprechen den ANSI-Zeichen...
Da irrt das DocWiki
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.034 Beiträge
 
Delphi 12 Athens
 
#5

AW: Verwirrung bei Chr und AnsiChar

  Alt 6. Apr 2017, 18:19
Zitat:
... Die ersten 256 Zeichen des Unicode-Zeichensatzes entsprechen den ANSI-Zeichen...
Da irrt das DocWiki
Kommt drauf an.

Ich weiß grade nicht welche, aber es gibt eine ANSI-CodePage, wo die ersten 256 Zeichen mit denen des Unicode übereinstimmen.

PS: Ich finde grade den Docwiki-Eintrag nicht, aber bei # muß man aufpassen.
#160 oder #0160 (kann sein, dass es nur bei Hexadezimal war)
#$ee oder #$00ee
Hier entscheidet der Compiler anhand der führenden 0, ob diese Konstante als ANSI oder Unicode interpretiert wird.
Bei ANSI kann es bei einer späteren Unicode-Konvertierung zu Problemen kommen und andersrum.


#85 ist da ein gutes Beispiel, wenn ich mich noch recht erinnere, wo sich AnsiChar(85) und WideChar(85) unterscheiden.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

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

AW: Verwirrung bei Chr und AnsiChar

  Alt 6. Apr 2017, 18:36
Hier entscheidet der Compiler anhand der führenden 0, ob diese Konstante als ANSI oder Unicode interpretiert wird.
Ach der Compiler entscheidet?
Und wenn es dem Benutzer/Programmierer nicht auffällt geht das solange bis es knallt, und dann kommt das Gegreine "es hat bis jetzt aber immer funktioniert".
das ist doch genauso ein Eiertanz wie der Blödsinn mit 16/32/64Bit für ein Integer.
warum nicht char8 oder char16 oder int16,int32,int64 und dann weiß ein jeder worum es geht. Und verschon mich bitte mit der "Abwärtskompatibilität", das erinnert mich immer an den Film mit Götz George.

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

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.034 Beiträge
 
Delphi 12 Athens
 
#7

AW: Verwirrung bei Chr und AnsiChar

  Alt 6. Apr 2017, 18:43
Du entscheidest, wie du es hinschreibst und der Compiler macht das dann so.

Im Docwiki von 2009 kann ja jemand mal die Unicode-Einführung durchblättern ... da dürfte die Hilfeseite verlinkt sein.


PS: Es gibt im windows doch auch 'ne Tastenkombination wie AltGr + 0 + 1 + 6 + 0 (auf'm Ziffernblock), um Unicodezeichen einzugeben. (geht hier im Terminal grade nicht)
Laut Windows-Hilfe gibt es da auch diesen Unterschied zwischen Alt+160 und Alt+0160
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 6. Apr 2017 um 18:47 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.443 Beiträge
 
Delphi 12 Athens
 
#8

AW: Verwirrung bei Chr und AnsiChar

  Alt 6. Apr 2017, 18:58
PS: Ich finde grade den Docwiki-Eintrag nicht, aber bei # muß man aufpassen.
#160 oder #0160 (kann sein, dass es nur bei Hexadezimal war)
#$ee oder #$00ee
Hier entscheidet der Compiler anhand der führenden 0, ob diese Konstante als ANSI oder Unicode interpretiert wird.
Bei ANSI kann es bei einer späteren Unicode-Konvertierung zu Problemen kommen und andersrum.
Das hängt auch von einer Compiler-Direktive ab: HIGHCHARUNICODE-Direktive (Delphi)
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.034 Beiträge
 
Delphi 12 Athens
 
#9

AW: Verwirrung bei Chr und AnsiChar

  Alt 6. Apr 2017, 20:37
Stimmt, die gab es auch noch.


Wem fällt was auf?
Zitat:
Werden alle dezimalen #$xx-Literale mit n Ziffern als AnsiChar analysiert.
Werden alle hexadezimalen #$xx-Literale mit zwei Ziffern als AnsiChar analysiert.
Werden alle hexadezimalen #$xxxx-Literale mit vier Ziffern als WideChar analysiert.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 6. Apr 2017 um 20:48 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

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

AW: Verwirrung bei Chr und AnsiChar

  Alt 7. Apr 2017, 00:16
Wo hast Du denn den Schwachsinn her?

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 13:05 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