Comment utiliser TRACE avec ascii dans un environnement MFC unicode?
Question
Je développe un programme MFC sous Windows CE. C'est unicode par défaut. Je peux utiliser TRACE pour imprimer un message comme celui-ci
TRACE(TEXT("Hey! we got a problem!\n"));
Cela fonctionne bien si tout est unicode. Mais cependant, j'ai une chaîne en ASCII à imprimer. Par exemple:
// 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);
J'ai lu la chaîne de caractères via com1 à partir d'un module GPS. Il envoie un texte comme celui-ci "$ GPSGGA, 1,2,3,4". Ils sont tous encodés en ASCII. Je veux les imprimer avec TRACE, comment puis-je faire?
Merci.
La solution
Utilisez "% hs "
pour formater un argument de chaîne étroite, à condition que vous ne vous préoccupiez pas de la page de code. Voir, par exemple, cette page pour description des spécificateurs de format.
Autres conseils
Sous Windows, le "% S " Le spécificateur de format («S» majuscule) formate une chaîne qui est le contraire de la construction. Dans les versions UNICODE, il attend une chaîne ANSI / MBCS et dans les versions non UNICODE, il attend un argument UNICODE.
Je ne suis pas sûr à 100% que cela fonctionnera avec CE, mais ce qui suit fonctionne sur le bureau (pour une version UNICODE):
TRACE( TEXT("Unicode string: \"%s\", ASCII string: \"%S\""), L"unicode", "ascii");
Cela devrait fonctionner tant que le texte récupéré est réellement ASCII dans la plage de 0 à 127 et que le codage Unicode est au format UTF-8. Unicode a adopté la plage ASCII inférieure en utilisant les mêmes points de code.