Pergunta

Estou desenvolvendo um programa MFC no Windows CE. É unicode por padrão. Eu posso usar TRACE para imprimir alguma mensagem como esta

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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top