Unicode MFC環境でasciiでTRACEを使用する方法は?
質問
Windows CEでMFCプログラムを開発しています。デフォルトではユニコードです。 TRACEを使用して、このようなメッセージを印刷できます
TRACE(TEXT("Hey! we got a problem!\n"));
すべてがユニコードであれば問題なく動作します。ただし、印刷するアスキー文字列を取得しました。例:
// 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);
GPSモジュールからcom1を介して文字列を読み取りました。このような「$ GPSGGA、1,2,3,4」のようなテキストを送信します。それらはすべてASCIIでエンコードされます。 TRACEで印刷したいのですが、どうすればいいですか?
ありがとう。
解決
"%hs"
を使用して、狭い文字列引数をフォーマットします(コードページを気にしない場合)。たとえば、このページをご覧ください。書式指定子の説明。
他のヒント
Windowsでは、"%S"形式指定子(大文字の 'S')は、ビルドの '反対'である文字列をフォーマットします。 UNICODEビルドではANSI / MBCS文字列が想定され、UNICODE以外のビルドではUNICODE引数が想定されます。
これがCEで動作することを100%確信しているわけではありませんが、デスクトップでは次のように動作します(UNICODEビルドの場合):
TRACE( TEXT("Unicode string: \"%s\", ASCII string: \"%S\""), L"unicode", "ascii");
取得したテキストが実際に0〜127の範囲のASCIIであり、UnicodeエンコーディングがUTF-8である限り、動作するはずです。 Unicodeは、同じコードポイントを使用して、より低いASCII範囲を採用しています。
所属していません StackOverflow