Как использовать TRACE с ascii в среде Unicode MFC? - PullRequest
1 голос
/ 30 ноября 2009

Я разрабатываю программу MFC под Windows CE. Это Unicode по умолчанию. Я могу использовать TRACE, чтобы напечатать какое-нибудь сообщение вроде этого

TRACE(TEXT("Hey! we got a problem!\n"));

Работает нормально, если все в юникоде. Но, тем не менее, я получил некоторую строку ascii для печати. Например:

// 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);

Я читаю строку через com1 из модуля GPS. Это отправляет текст как это "$ GPSGGA, 1,2,3,4". Все они закодированы с помощью ASCII. Я хочу распечатать их с TRACE, как я могу это сделать?

Спасибо.

Ответы [ 3 ]

3 голосов
/ 30 ноября 2009

Используйте "%hs" для форматирования узкого строкового аргумента, при условии, что вас не волнует кодовая страница. См., Например, эту страницу для описания спецификаторов формата.

1 голос
/ 30 ноября 2009

В Windows спецификатор формата "% S" (заглавная 'S') отформатирует строку, которая является "противоположной" для сборки. В сборках UNICODE он ожидает строку ANSI / MBCS, а в сборках, отличных от UNICODE, он ожидает аргумент UNICODE.

Я не уверен на 100%, что это будет работать на CE, но на десктопе работает следующее (для сборки UNICODE):

TRACE( TEXT("Unicode string: \"%s\", ASCII string: \"%S\""), L"unicode", "ascii");
0 голосов
/ 30 ноября 2009

Это должно работать, пока получаемый текст действительно ASCII в диапазоне 0–127, а кодировка Unicode - UTF-8. Юникод принял более низкий диапазон ASCII, используя те же кодовые точки.

...