Wie man verwendet TRACE mit ascii unter Unicode-MFC-Umgebung?
Frage
Ich bin ein MFC-Programm unter Windows CE entwickeln. Es ist Unicode standardmäßig. Ich kann TRACE verwenden eine Meldung wie diese drucken
TRACE(TEXT("Hey! we got a problem!\n"));
Es funktioniert gut, wenn alles Unicode ist. Aber wie auch immer, ich habe einige ascii Zeichenfolge zu drucken. Zum Beispiel:
// open the serial port
m_Context = CreateFile(TEXT("COM1:"), ...);
int rc = ReadFile(m_Context, buffer, 1, cBytes, NULL);
// Oops!! We got a problem, because we can't print a non-unicode string
TRACE(TEXT("Read data: %s\n"), buffer);
Ich lese Schnur durch com1 von einem GPS-Modul. Es sendet Text wie dieser "$ GPSGGA, 1,2,3,4". Sie sind alle mit ASCII codiert. Ich möchte, dass sie mit TRACE auszudrucken, wie kann ich tun?
Danke.
Lösung
Verwenden "%hs"
ein schmales String-Argument formatiert werden, vorausgesetzt, dass Sie nicht über die Codepage egal. Siehe zum Beispiel dieser Seite Beschreibung des Formatbezeich.
Andere Tipps
In Windows das „% S“ Formatbezeichner (capital ‚S‘) wird eine Zeichenfolge formatieren, die das ‚Gegenteil‘ des Build ist. In UNICODE baut wird es ein ANSI / MBCS-String und in Nicht-UNICODE erwarten baut es wird ein UNICODE Argument erwartet.
Ich bin nicht 100% sicher, dass dies auf CE funktionieren wird, aber die folgenden Arbeiten auf dem Desktop (für eine UNICODE-Build):
TRACE( TEXT("Unicode string: \"%s\", ASCII string: \"%S\""), L"unicode", "ascii");
Es sollte funktionieren, solange der abgerufenen Text wirklich ASCII im Bereich von 0-127 ist, und die Unicode-Kodierung ist UTF-8. Unicode hat den unteren ASCII-Bereich angenommen, die gleichen Codepunkte.