質問

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範囲を採用しています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top