Come usare TRACE con ascii in ambiente MFC unicode?
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.
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.