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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top