ascii-zeichen?



  • ich muss einen text/font manager implementieren (nein, nicht win/linux etc, also bitte keine vorschläge betreffs libraries), wofür ich natürlich eine ascii-tabelle brauche, um die zeichen in die entsprechende grafik zu übersetzen. aber soweit ich weiss (bzw. mir gesagt wurde 😉 ) sind nur die ersten 127 einträge standardisiert, der rest (die sonderzeichen etc.) können unterschiedlich sein. so hab ich hier in einem buch auch 2 ascii-tabellen, eine für dos, eine für win.
    frage nun: welche tabelle benutzt C++ um die zeichen zu übersetzen (wenn man einfache chars benutzt)?



  • for(unsigned char Charakter = 0; Charakter < 255; Charakter++)
    {
    	cout << (int) Charakter << ": " << Charakter << "\n";
    }
    

    Bin mir nicht sicher, ob es das ist, was du willst, aber dieser Code gibt dir alle Zeichen, die in einem char gespeichert werden können aus.



  • Es gibt nur einen ASCII-Code; der deckt alle 7-Bit-Zeichen ab. Die beiden Tabellen, die du hast, dürften sich erst ab dezimal 128 unterscheiden.
    Die "DOS-Tabelle" kennt man auch als "erweiterten ASCII-Code", das ist die mit den Blockgrafiken. Weil man sowas heute nicht mehr braucht, hat Windows mit dem ANSI-Zeichensatz (dafür gibts auch einen langen Namen) die Blockgrafiken abgeschafft und durch Umlaute, Sonderzeichen etc. ersetzt. Der "Windowszeichensatz" ist bis dezimal 127 kompatibel zu ASCII.
    Man muss aber beachten, dass alles über 127 auf einem deutschen Windows anders erscheint als auf einem anderssprachigen; auf einem russischen etwa wird man kein äöü sehen (dort benutzt man eine andere Codepage).
    Bei C++ kann man mit use_facet (oder so ähnlich, hab das noch nie benutzt) die Codepage einstellen.

    Mit Unicode hat man dieses Durcheinander nicht.



  • hmm, nun bin ich mir nicht sicher, was wie wozu kompatibel ist 😃
    ok, sagen wir mal ich haben diesen char:

    char Text[]="grüße";
    

    wenn das jetzt jemand mit einem OS ohne passenden zeichensatz compiliert, würde Text mit anderen daten gefüllt?



  • godlikebot schrieb:

    for(unsigned char Charakter = 0; Charakter < 255; Charakter++)
    {
    	cout << (int) Charakter << ": " << Charakter << "\n";
    }
    

    Bin mir nicht sicher, ob es das ist, was du willst, aber dieser Code gibt dir alle Zeichen, die in einem char gespeichert werden können aus.

    unsigned char beginnt bei 0 und endet bei 255? WoW! Ich dachte nur das ging bei einem signed char der equivalent zu char ist. 😮 😮 😮



  • nix da schrieb:

    unsigned char beginnt bei 0 und endet bei 255? WoW! Ich dachte nur das ging bei einem signed char der equivalent zu char ist.

    Ich hab das neulich mal in irgend nem Tutorial so gelesen. Der Rechner piept zwar n bissl rum, aber er gibt für (fast) alle Zeichen irgendwas aus. 🙂
    Wo sind denn dann die grenzen eines unsigned chars, bzw. signed chars.



  • Ist klar das der am piepsen ist und das ca. 128 mal.

    unsigned char beginnt bei -127 und endet bei +128.



  • Blödsinn, wie kann ein unsigned bei -127 beginnen?!

    Er piepst genau einmal, das ist bei der Ausgabe des Ascii-Zeichens 6. Baut einmal ein ungewolltes Enter ein, etc.

    Deswegen gibt man Ascii-Tabellen meistens nur von 32 bis 255 aus.

    Der einzige Fehler der oben im Programm ist, ist imho "<255", dort gehört "<=255".

    MfG SideWinder



  • Korrektur: habe signed mit unsigned verwechselt.

    Bei signed char beginnt es bei -127 und geht bis +127.



  • Wieder falsch. signed char geht von -128 bis +127.

    MfG SideWinder



  • Stimmt, man muss auf 2^8 kommen.



  • nix da schrieb:

    Stimmt, man muss auf 2^8 kommen.

    ui ui ... *grins* was für ein vorlauf, bis dahin gekommen wurde.



  • halten wir also fest, dass es niemand genau weiss?



  • Doch: In diener Compiler-Hilfe findest du sicher irgendwo die ASCII-Tabelle. Beim MSVC in der MSDN unter "ascii character code chart 1" und "... chart 2"

    MfG SideWinder


Anmelden zum Antworten