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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top