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.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top