![]() |
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 |
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. |
Re: Ist AnsiChar wirklich gleich ASCII-Char?
Zitat:
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. |
Re: Ist AnsiChar wirklich gleich ASCII-Char?
Zitat:
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 |
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:
|
Re: Ist AnsiChar wirklich gleich ASCII-Char?
Zitat:
Das heißt, ich baue jetzt meine Headerdatei so um
Delphi-Quellcode:
Wie nennt man bei Delphi eine Headerdatei? Interface?
{$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} Grüße, Messie |
Re: Ist AnsiChar wirklich gleich ASCII-Char?
Zitat:
Delphi-Quellcode:
Char ist im Nicht-Unicode auch =AnsiChar und es kommt demnach Beides auf's Selbe raus, da in Delphi es praktish so aussieht
szDriverVer : array[0..7] of AnsiChar; { device driver version }
szDriverName: array[0..MAX_DRIVER_NAME_LEN-1] of AnsiChar; { device driver name }
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: |
Re: Ist AnsiChar wirklich gleich ASCII-Char?
Zitat:
Grüße, Messie |
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 |
Re: Ist AnsiChar wirklich gleich ASCII-Char?
Zitat:
Zitat:
*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 11:06 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz