Domanda

Sto sviluppando un programma MFC in Windows CE. È unicode per impostazione predefinita. Posso usare TRACE per stampare alcuni messaggi come questo

TRACE(TEXT("Hey! we got a problem!\n"));

Funziona bene se tutto è unicode. Tuttavia, ho una stringa ASCII da stampare. Ad esempio:

// 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);

Ho letto la stringa attraverso com1 da un modulo GPS. Invia testo come questo " $ GPSGGA, 1,2,3,4 " ;. Sono tutti codificati con ASCII. Voglio stamparli con TRACE, come posso fare?

Grazie.

È stato utile?

Soluzione

Usa "% hs " per formattare un argomento con stringhe strette, a condizione che non ti interessi della tabella codici. Vedere, ad esempio, questa pagina per descrizione degli identificatori di formato.

Altri suggerimenti

In Windows il "% S " l'identificatore di formato ("S" maiuscola formatterà una stringa che è "l'opposto" della build. Nelle build UNICODE si aspetta una stringa ANSI / MBCS e nelle build non UNICODE si aspetta un argomento UNICODE.

Non sono sicuro al 100% che funzionerà su CE, ma i seguenti lavori sul desktop (per una build UNICODE):

TRACE( TEXT("Unicode string: \"%s\", ASCII string: \"%S\""), L"unicode", "ascii");

Dovrebbe funzionare fintanto che il testo recuperato è realmente ASCII nell'intervallo 0 & # 8211; 127 e la codifica Unicode è UTF-8. Unicode ha adottato l'intervallo ASCII inferiore, utilizzando gli stessi punti di codice.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top