web-dev-qa-db-ja.com

CStringをconst char *に変換します

Unicode MFCアプリケーションでCStringからconst char*に変換するにはどうすればよいですか?

47
Attilah

TCHAR CStringをASCIIに変換するには、CT2Aマクロ-これにより、文字列をUTF8(または他のWindowsコードページ)に変換することもできます。

// Convert using the local code page
CString str(_T("Hello, world!"));
CT2A ascii(str);
TRACE(_T("ASCII: %S\n"), ascii.m_psz);

// Convert to UTF8
CString str(_T("Some Unicode goodness"));
CT2A ascii(str, CP_UTF8);
TRACE(_T("UTF8: %S\n"), ascii.m_psz);

// Convert to Thai code page
CString str(_T("Some Thai text"));
CT2A ascii(str, 874);
TRACE(_T("Thai: %S\n"), ascii.m_psz);

ASCII-> Unicode(CA2T)VS2003以上があれば、ATL/WTLアプリでこれらを使用できます。

詳細については [〜#〜] msdn [〜#〜] を参照してください。

64
Rob

CStringがUnicodeの場合、マルチバイト文字に変換する必要があります。幸いなことに、これを自動的に行うCStringのバージョンがあります。

CString unicodestr = _T("Testing");
CStringA charstr(unicodestr);
DoMyStuff((const char *) charstr);
20
Mark Ransom

注:この回答はUnicode要件よりも前です。コメントを参照してください。

キャストするだけです:

CString s;
const TCHAR* x = (LPCTSTR) s;

CStringにはまさにこれを行うキャスト演算子があるため、機能します。

TCHARを使用すると、コードがUnicodeに依存しなくなります。 Unicodeに関心がない場合は、charの代わりにTCHARを使用できます。

15
RichieHindle

CStringからLPCTSTRへの明示的なキャストがあるため、次のことができます(Unicodeが指定されていない場合)。

CString str;
// ....
const char* cstr = (LPCTSTR)str;
4
Reed Copsey

同様の問題がありました。持っていた char* .so名の入ったバッファ。
変換できませんでしたchar*変数からLPCTSTRへ。ここに私がそれを回避する方法があります...

char *fNam;
...
LPCSTR nam = fNam;
dll = LoadLibraryA(nam);
2
Mr.What

ConvUnicode.hのTtoCを使用することをお勧めします

const CString Word= "hello";
const char* myFile = TtoC(path.GetString());

Unicodeごとに変換を行うマクロです

0
felixjimcal

汎用変換マクロ(TN059その他の考慮事項セクションが重要です):

A2CW     (LPCSTR)  -> (LPCWSTR)  
A2W      (LPCSTR)  -> (LPWSTR)  
W2CA     (LPCWSTR) -> (LPCSTR)  
W2A      (LPCWSTR) -> (LPSTR) 
0
Amit G.