2009-11-30 10 views
1

Je développe un programme MFC sous Windows CE. C'est unicode par défaut. Je peux utiliser TRACE pour imprimer un certain message comme celui-ciComment utiliser TRACE avec ascii dans un environnement MFC unicode?

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

Il fonctionne très bien si tout est unicode. Mais cependant, j'ai une chaîne 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 une chaîne 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.

Répondre

3

Utilisez "%hs" pour formater un argument de chaîne étroite, à condition que vous ne vous souciez pas de la page de codes. Voir, par exemple, this page pour la description des spécificateurs de format.

0

Cela devrait fonctionner tant que le texte récupéré est vraiment ASCII dans la plage 0-127, et que le codage Unicode est UTF-8. Unicode a adopté la plage ASCII inférieure, en utilisant les mêmes points de code.

1

Dans Windows, le spécificateur de format "% S" (majuscule 'S') formatera une chaîne qui est 'l'opposé' de la construction. Dans les versions UNICODE, il s'attend à une chaîne ANSI/MBCS et dans les générations non-UNICODE, il attend un argument UNICODE.

Je ne suis pas 100% sûr que cela fonctionnera sur CE, mais les travaux suivants sur le bureau (pour une version UNICODE):

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