C / C ++(ms)でchar []とtchar []を相互に変換する最も簡単な方法は何ですか?

StackOverflow https://stackoverflow.com/questions/159442

  •  03-07-2019
  •  | 
  •  

質問

これはかなりソフトボールの質問のように見えますが、charとtcharの参照に関して非常に多くのバリエーションがあるように見えるので、私は常にこの関数を調べるのに苦労しています。

他のヒント

最も簡単な方法は、変換マクロを使用することです:

  • CW2A
  • CA2W
  • etc ...

MSDN

TCHARは、charまたはwchar_t(ワイド文字)のMicrosoft固有のtypedefです。

charへの変換は、これらのどれが実際にあるかに依存します。 TCHARが実際にcharである場合、単純なキャストを実行できますが、それが本当にwchar_tである場合、文字セット間で変換するルーチンが必要になります。関数MultiByteToWideChar()

を参照してください

この投稿には、特にクロスプラットフォームソリューションを探している場合にもいくつかの回答があります:

UTF8からSTLへのワイド文字変換

  
    

この特定の状況では、TCharはワイド文字であると思いますが、そうでない場合にのみ変換を行う必要があります。どうにかして確認する必要があります。

  
if (sizeof(TCHAR) != sizeof(wchar_t))
{  .... }

それに関する素晴らしいことは、両方の等しいサイズが定数であるということです。つまり、コンパイラーはif()を処理(および削除)し、等しい場合は中括弧内のすべてを削除します

これは、_TCHAR * argv []をchar * argn []に複製するCPPコードです。

http://www.wincli.com/?p=72

>

Windowsに古いコードを採用する場合は、コードでオプションとして定義されている単純な使用を定義します。

コードに条件を入れることができます

ifdef _UNICODE

{// TCHARはワイド文字のようになります}その他{// TCHARは文字のようになります}

これは古いスレッドであることに気付きましたが、「正しい」とは言えませんでした。答えてください。今すぐ追加しています。

これが現在行われているように見える方法は、TEXTマクロを使用することです。 msdnのFindFirstFileの例はこれを指摘しています。 http://msdn.microsoft .com / en-us / library / windows / desktop / aa364418%28v = vs.85%29.aspx

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