Как использовать ТРАССИРОВКУ с ascii в среде unicode MFC?

StackOverflow https://stackoverflow.com/questions/1818366

Вопрос

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

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, как я могу это сделать?

Спасибо.

Это было полезно?

Решение

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

Другие советы

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

Я не уверен на 100%, что это будет работать на CE, но следующее работает на рабочем столе (для сборки в ЮНИКОДЕ):

TRACE( TEXT("Unicode string: \"%s\", ASCII string: \"%S\""), L"unicode", "ascii");

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top