Как использовать ТРАССИРОВКУ с ascii в среде unicode MFC?
Вопрос
Я разрабатываю программу 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, используя те же кодовые точки.