18

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

4

8 に答える 8

10

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

  • CW2A
  • CA2W
  • 等...

MSDN

于 2008-10-01T20:22:38.173 に答える
7

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

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

于 2008-10-01T20:03:52.493 に答える
7

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

于 2008-10-01T20:05:22.943 に答える
3

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

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

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

于 2008-10-01T20:25:09.620 に答える
3

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

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

于 2008-10-01T20:09:49.063 に答える
2

_TCHAR * argv[] を char * argn[] に複製する CPP コードを次に示します。

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

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

于 2010-10-27T03:32:22.977 に答える
1

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

ifdef _UNICODE

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

于 2016-05-31T08:28:48.240 に答える
0

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

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

于 2012-01-26T17:41:29.670 に答える