¿Cómo usar TRACE con ascii en un entorno MFC unicode?
Pregunta
Estoy desarrollando un programa MFC en Windows CE. Es unicode por defecto. Puedo usar TRACE para imprimir un mensaje como este
TRACE(TEXT("Hey! we got a problem!\n"));
Funciona bien si todo es unicode. Pero, sin embargo, tengo que imprimir una cadena ASCII. Por ejemplo:
// 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);
Leí la cadena a través de com1 desde un módulo GPS. Envía mensajes de texto como este " $ GPSGGA, 1,2,3,4 " ;. Todos están codificados con ASCII. Quiero imprimirlos con TRACE, ¿cómo puedo hacerlo?
Gracias.
Solución
Use "% hs "
para formatear un argumento de cadena estrecha, siempre que no le importe la página de códigos. Consulte, por ejemplo, esta página para descripción de especificadores de formato.
Otros consejos
En Windows, el "% S " El especificador de formato (mayúscula 'S') formateará una cadena que es el 'opuesto' de la compilación. En las compilaciones UNICODE esperará una cadena ANSI / MBCS y en las compilaciones que no sean UNICODE esperará un argumento UNICODE.
No estoy 100% seguro de que esto funcione en CE, pero lo siguiente funciona en el escritorio (para una compilación UNICODE):
TRACE( TEXT("Unicode string: \"%s\", ASCII string: \"%S\""), L"unicode", "ascii");
Debería funcionar siempre que el texto recuperado sea realmente ASCII en el rango 0–127, y la codificación Unicode sea UTF-8. Unicode ha adoptado el rango ASCII más bajo, utilizando los mismos puntos de código.