web-dev-qa-db-ja.com

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

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

18
CrashCodes

MultiByteToWideChar だけでなく、 "MultiByteToWideCharのいくつかの落とし穴" も参照してください。

7
jeffm

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

  • CW2A
  • CA2W
  • 等...

[〜#〜] msdn [〜#〜]

10
RichS

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

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

7
Chris Johnson

この特定の状況では、TCharはワイド文字だと思いますが、変換を行う必要があるのはそうでない場合のみです。どういうわけかチェックしなきゃ。

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

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

3
James Curran

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

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

3
Mark Ransom

_TCHAR * argv []をchar * argn []に複製するCPPコードは次のとおりです。

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

古いコードをWindowsに採用する場合は、コードに記載されている定義をオプションとして使用するだけです。

2
Dmitry Obukhov

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

ifdef _UNICODE

{// DO LIKE TCHAR IS WIDE CHAR} ELSE {// DO LIKE TCHAR IS CHAR}

1
chandan

これは古いスレッドだと思いますが、「正しい」答えが得られなかったので、今追加しています。

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

0
John