Como usar TRACE com ascii sob unicode ambiente MFC?
Pergunta
Estou desenvolvendo um programa MFC no Windows CE. É unicode por padrão. Eu posso usar TRACE para imprimir alguma mensagem como esta ??p>
TRACE(TEXT("Hey! we got a problem!\n"));
Ele funciona muito bem se tudo é unicode. Mas no entanto, eu tenho algumas seqüência de caracteres ASCII para imprimir. Por exemplo:
// 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);
Eu li corda através com1 de um módulo GPS. Ele enviar um texto como este "$ GPSGGA, 1,2,3,4". Eles são todos codificados com ASCII. Eu quero imprimi-los com TRACE, como eu posso fazer?
Graças.
Solução
Use "%hs"
para formatar um argumento de cadeia estreita, desde que você não se preocupam com a página de código. Veja, por exemplo, desta página para descrição dos especificadores de formato.
Outras dicas
No Windows, o "% S" especificador de formato (capital 'S') irá formatar uma cadeia que é o 'oposto' da compilação. Em Unicode constrói ele vai esperar uma cadeia ANSI / MBCS e não-Unicode cria ele vai esperar um argumento Unicode.
Eu não estou 100% de certeza que isso vai funcionar na CE, mas os seguintes trabalhos na área de trabalho (para uma compilação Unicode):
TRACE( TEXT("Unicode string: \"%s\", ASCII string: \"%S\""), L"unicode", "ascii");
Ele deve funcionar, desde que o texto recuperado é realmente ASCII no intervalo de 0-127, ea codificação Unicode é UTF-8. Unicode adotou o intervalo ASCII inferior, utilizando os pontos mesmo código.