AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Ist AnsiChar wirklich gleich ASCII-Char?
Thema durchsuchen
Ansicht
Themen-Optionen

Ist AnsiChar wirklich gleich ASCII-Char?

Ein Thema von messie · begonnen am 19. Okt 2009 · letzter Beitrag vom 19. Okt 2009
Antwort Antwort
Seite 1 von 2  1 2      
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#1

Ist AnsiChar wirklich gleich ASCII-Char?

  Alt 19. Okt 2009, 09:43
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
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Ist AnsiChar wirklich gleich ASCII-Char?

  Alt 19. Okt 2009, 09:47
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.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Ist AnsiChar wirklich gleich ASCII-Char?

  Alt 19. Okt 2009, 09:58
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.
$2B or not $2B
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#4

Re: Ist AnsiChar wirklich gleich ASCII-Char?

  Alt 19. Okt 2009, 10:14
Zitat von himitsu:
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Ist AnsiChar wirklich gleich ASCII-Char?

  Alt 19. Okt 2009, 10:24
Gut, man überspringt beim Unicode dann einfach jedes zweite Byte und überließt dennoch keine Informationen (also in diesem Spezialfall)

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
$2B or not $2B
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#6

Re: Ist AnsiChar wirklich gleich ASCII-Char?

  Alt 19. Okt 2009, 10:31
Zitat von himitsu:
Na das ist dann ja hoffentlich zu deiner Zufriedenheit gelöst
Ja!

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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Ist AnsiChar wirklich gleich ASCII-Char?

  Alt 19. Okt 2009, 11:18
Zitat:
Das heißt, ich baue jetzt meine Headerdatei so um
laß doch Einfach den extra Unicode-Teil weg
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
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
$2B or not $2B
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#8

Re: Ist AnsiChar wirklich gleich ASCII-Char?

  Alt 19. Okt 2009, 12:13
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
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#9

Re: Ist AnsiChar wirklich gleich ASCII-Char?

  Alt 19. Okt 2009, 12:42
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Ist AnsiChar wirklich gleich ASCII-Char?

  Alt 19. Okt 2009, 13:04
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
$2B or not $2B
  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 04:47 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