Edit Control ASCII-Zeichen



  • Hallo,

    meine Anwendung verwendet den Unicode-Zeichensatz.
    Nun möchte ich in einem Edit Control ASCII-Zeichen anzeigen.
    Das können alle ASCII-Zeichen sein die es gibt.
    Mein Problem ist, dass nicht alle korrekt angezeigt werden.
    Bei einigen, wie z.B. bei ("‰") wird ein dicker, senkrechter Strich angezeigt.
    Wie kann ich diese Zeichen auch korrekt darstellen?

    Bisher mache ich es wie folgt:

    sprintf(test_ascii, "%c", 137);
    m_ASCII2 = test_ascii;
    

    m_ASCII2 ist das Edit Control.

    Vielen Dank für Eure Hilfe.

    Mfg
    schmitti81



  • %c ist die Ausgabe für ein Character und das kann deine 137 nicht darstellen, weil es als signed nur bis 127 geht. Da ist es egal ob deine Anwendung Unicode oder Multibyte nutzt.



  • Danke, für die Information.
    Was muss/sollte ich stattdessen verwenden?

    Vielen Dank.
    Gruß
    schmitti81

    Edit: Wenn ich die Anwendung an der Stelle debugge, sehe ich, dass der Wert, also "‰" richtig in der Variablen steht. Nur angezeigt wird es nicht richtig.



  • Welchen Typ haben denn test_ascii und m_ASCII2? Sind das beides unsigned char?



  • test_ascii hat den Typ unsigned char.

    unsigned char test_ascii[10];
    

    m_ASCII2 ist CString und ist die Variable für ein Edit Control zur Anzeige.

    DDX_Text(pDX, IDC_ASCII2, m_ASCII2);
    

    Gruß
    schmitti81



  • und warum nimmst du wenn nicht schon die Formatierung von CString?

    m_ASCII2.Format("%c", 137);
    


  • CTecS schrieb:

    und warum nimmst du wenn nicht schon die Formatierung von CString?

    m_ASCII2.Format("%c", 137);
    

    oder: http://www.cplusplus.com/reference/clibrary/cstdlib/itoa.html



  • tha_specializt schrieb:

    CTecS schrieb:

    und warum nimmst du wenn nicht schon die Formatierung von CString?

    m_ASCII2.Format("%c", 137);
    

    oder: http://www.cplusplus.com/reference/clibrary/cstdlib/itoa.html

    Nein! Er will nicht die Zahl 137 in einen String umwandeln. Lies mal genauer. Er will einen char (hier ASCII 137) in einen String packen. da hilft itoa nicht.



  • natürlich hilft das, und zwar so:

    m_ASCII2.Format("%c", itoa(137, NULL, 10) );

    Sofern das überhaupt kompiliert und nicht NULL durch einen gültigen Pointer ersetzt werden müsste geht das wunderbar. Allerdings wäre es doppelt gemoppelt weil .Format das ja bereits macht 😃



  • tha_specializt schrieb:

    natürlich hilft das, und zwar so:

    m_ASCII2.Format("%c", itoa(137, NULL, 10) );

    Sofern das überhaupt kompiliert und nicht NULL durch einen gültigen Pointer ersetzt werden müsste geht das wunderbar. Allerdings wäre es doppelt gemoppelt weil .Format das ja bereits macht 😃

    Erstens geht das schief, weil die NULL-Zeiger-Sache so Quatsch ist. itoa gibt denselben Zeiger zurück, den du zuvor übergibst. NULL ist also denkbar ungünstig.

    Und zweitens: du weißt schon, dass du hier einen String (char*) mit "137" füllst, ne? itoa==Integer-to-Array, im Format-String verlangst du aber ein char ("%c"), und das soll eigentlich den Wert 137 ('%') haben. In "137" gibt es kein char mit dem Wert 137... 🙄



  • CTecS schrieb:

    und warum nimmst du wenn nicht schon die Formatierung von CString?

    m_ASCII2.Format("%c", 137);
    

    Ich hab es damit probiert und es funktioniert auch nicht.
    Allerdings sehe ich da beim Debuggen gleich ein "‰".
    Kann das auch an allgemeinen Einstellungen im Visual Studio 2008 liegen?

    Danke, gruß
    schmitti81



  • mal wieder so eine idee (wobei meine einwürfe ja hier äußerst Diskutiert werden), kann denn der eingesetzte Font auch das zeichen darstellen, also is das zeichen im Font enthalten?


  • Mod

    Dieses rumgestochere im Nebel kann man ja nicht mit ansehen.
    1. Dieses besagte Zeichen 137 existiert in dem MBCS Zeichensatz den Windows intern verwendet.
    2. In Unicode sieht das ganze aber ganz anders aus. Schau Dir bitte die Unicode Zeichentabellen an. Ein einfaches konvertieten von '\x89' nach L'\x89' kann es nicht sein.
    4. Meine Recherche ergab: Es müsste den Wert 2030 haben.

    wchar_t wchar = L'\x2030';
    

    5. Hast Du versucht den MBCS String zu konvertieren?
    Was passiert wenn Du L"‰" benutzt, oder _T('‰')?



  • Ich hatte erst jetzt wieder Zeit das auszuprobieren.
    Es funktioniert. Ich habe die Schriftart geändert.
    Die Standardschriftart in Visual Studio kann nicht alle Zeichen anzeigen.

    Vielen Dank für Eure Hilfe.

    Mfg
    schmitti81


Log in to reply