Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Ist AnsiChar wirklich gleich ASCII-Char? (https://www.delphipraxis.net/141920-ist-ansichar-wirklich-gleich-ascii-char.html)

messie 19. Okt 2009 08:43


Ist AnsiChar wirklich gleich ASCII-Char?
 
Moin,

mit der Einführung von Unicode muss ich gelegentlich mal wieder Chars und PChars auf AnsiChars umstellen, da meine Messgeräte sonst Mist liefern.
Weil dort üblicherweise mit Pointern gearbeitet wird, möchte ich mich nochmal vergewissern? Ist ein AnsiChar 0..127 wirklich hundertprozentig gleich einem ASCII-Byte? Denn da wird doch mit der Codepage rumgefummelt. Gibt es eine Zeichen-Entsprechung zum RawByteString oder ist sie das bereits?

Grüße, Messie

Elvis 19. Okt 2009 08:47

Re: Ist AnsiChar wirklich gleich ASCII-Char?
 
ASCII geht von 1..127, Ansi blended, je nach Codepage, oberhalb von 127 andere Zeichen ein.
In in westeuropäischen Codepages sind das zum Beispiel Umlaute.
Ansi ist ein Superset von ASCII, denn ASCI nutzt nur 7 Bit, während ANSI ein weiteres Bit (für alles > 127) hat.

himitsu 19. Okt 2009 08:58

Re: Ist AnsiChar wirklich gleich ASCII-Char?
 
Zitat:

Zitat von Elvis
Ansi ist ein Superset von ASCII, denn ASCI nutzt nur 7 Bit,

Auch im Unicode stimmen diese ersten 128 Zeichen mit dem ASCII überein.

und sogar UTF-8 würde einen ASCII-kompatiblen Datenstom liefern, wenn man ihm ASCII unterschiebt, da dort die Zeichencodierung auch erst ab dem 8. Bit (Bit 7, also dem Höchsten) beginnt.

messie 19. Okt 2009 09:14

Re: Ist AnsiChar wirklich gleich ASCII-Char?
 
Zitat:

Zitat von himitsu
Zitat:

Zitat von Elvis
Ansi ist ein Superset von ASCII, denn ASCI nutzt nur 7 Bit,

Auch im Unicode stimmen diese ersten 128 Zeichen mit dem ASCII überein.

und sogar UTF-8 würde einen ASCII-kompatiblen Datenstrom liefern, wenn man ihm ASCII unterschiebt, da dort die Zeichencodierung auch erst ab dem 8. Bit (Bit 7, also dem Höchsten) beginnt.

Ja, aber eben nur kompatibel. Beim Einlesen schiebt Delphi jetzt aber den Adresszeiger zwei Byte weiter statt bisher ein Byte. Und damit kommt natürlich nur Müll raus...

Die Zeichen sind mir nicht so wichtig, ich wollte nur wissen, ob für den Compiler ein AnsiChar garantiert immer ein Byte lang und ohne irgendwelchen Codepage-Anhang ist.

Grüße, Messie

himitsu 19. Okt 2009 09:24

Re: Ist AnsiChar wirklich gleich ASCII-Char?
 
Gut, man überspringt beim Unicode dann einfach jedes zweite Byte und überließt dennoch keine Informationen (also in diesem Spezialfall) :angel2:

Zitat:

Zitat von messie
Die Zeichen sind mir nicht so wichtig, ich wollte nur wissen, ob für den Compiler ein AnsiChar garantiert immer ein Byte lang und ohne irgendwelchen Codepage-Anhang ist.

Na das ist dann ja hoffentlich zu deiner Zufriedenheit gelöst :angel:

messie 19. Okt 2009 09:31

Re: Ist AnsiChar wirklich gleich ASCII-Char?
 
Zitat:

Zitat von himitsu
Na das ist dann ja hoffentlich zu deiner Zufriedenheit gelöst :angel:

Ja! :-D

Das heißt, ich baue jetzt meine Headerdatei so um
Delphi-Quellcode:
{$IFDEF UNICODE}
    szDriverVer : array[0..7] of AnsiChar;                     { device driver version }
    szDriverName: array[0..MAX_DRIVER_NAME_LEN-1] of AnsiChar; { device driver name   }
    {$ELSEIF}
    szDriverVer : array[0..7] of char;                     { device driver version }
    szDriverName: array[0..MAX_DRIVER_NAME_LEN-1] of char; { device driver name   }
    {$IFEND}
Wie nennt man bei Delphi eine Headerdatei? Interface?
Grüße, Messie

himitsu 19. Okt 2009 10:18

Re: Ist AnsiChar wirklich gleich ASCII-Char?
 
Zitat:

Das heißt, ich baue jetzt meine Headerdatei so um
laß doch Einfach den extra Unicode-Teil weg :zwinker:
Delphi-Quellcode:
szDriverVer : array[0..7] of AnsiChar;                     { device driver version }
szDriverName: array[0..MAX_DRIVER_NAME_LEN-1] of AnsiChar; { device driver name   }
Char ist im Nicht-Unicode auch =AnsiChar und es kommt demnach Beides auf's Selbe raus, da in Delphi es praktish so aussieht
Delphi-Quellcode:
type Char = {$IFDEF UNICODE}WideChar{$ELSE}AnsiChar{$IFEND};

'ne einzelne Headerdatei gibt es ja in Delphi im Prinzip nicht

hier haben wir
das Interface - quasi die Headerdaten
und direkt darunter die Implementation

ich find es so zusammen schöner/übersichtlicher, aber ist bestimmt Geschmackssache :angel2:

messie 19. Okt 2009 11:13

Re: Ist AnsiChar wirklich gleich ASCII-Char?
 
Zitat:

Zitat von himitsu
Char ist im Nicht-Unicode auch =AnsiChar

Für alle Versionen ab Delphi 1 bis Delphi 11? Ich frage, weil ich das dann dem Hersteller schicken kann. Ich glaube, die Delphianer bei denen sind ausgestorben...

Grüße, Messie

jbg 19. Okt 2009 11:42

Re: Ist AnsiChar wirklich gleich ASCII-Char?
 
Delphi 1
Char = Char (SizeOf(Char) = 1)
kennt weder AnsiChar noch WideChar, aber wer nutzt das 16 Bit Delphi überhaupt noch?

Delphi 2-2007
Char = AnsiChar (SizeOf(Char) = SizeOf(AnsiChar) = 1)
AnsiChar = AnsiChar (SizeOf(AnsiChar) = 1) identisch mit Delphi ab 2009
WideChar = WideChar (SizeOf(WideChar) = 2) identisch mit Delphi ab 2009

Delphi ab 2009
Char = WideChar (SizeOf(Char) = SizeOf(WideChar) = 2)
AnsiChar = AnsiChar (SizeOf(AnsiChar) = 1) identisch mit Delphi 2-2007
WideChar = WideChar (SizeOf(WideChar) = 2) identisch mit Delphi 2-2007

himitsu 19. Okt 2009 12:04

Re: Ist AnsiChar wirklich gleich ASCII-Char?
 
Zitat:

Zitat von messie
Für alle Versionen ...?

Ja (Delphi 1 mag zwar den Typ AnsiChar nicht kennen, aber genutzt hat es den schon)


Zitat:

Delphi 1 bis Delphi 11?
ich glaub wir sind schon bei Delphi 14

*rechne*
Delphi 2006 / Turbo Delphi = Version 10
2007 = 11
2009 = 12
1010 = 13?

ich komm da zwar nur auf 13, aber ich glaub da wurde 'ne Version ausgelassen

und mit der CompilerVersion ... Delphi 2009 hat die CompilerVersion 20


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:41 Uhr.
Seite 1 von 2  1 2      

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