Unicode MFCアプリケーションでCString
からconst char*
に変換するにはどうすればよいですか?
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 [〜#〜] を参照してください。
CStringがUnicodeの場合、マルチバイト文字に変換する必要があります。幸いなことに、これを自動的に行うCStringのバージョンがあります。
CString unicodestr = _T("Testing");
CStringA charstr(unicodestr);
DoMyStuff((const char *) charstr);
注:この回答はUnicode要件よりも前です。コメントを参照してください。
キャストするだけです:
CString s;
const TCHAR* x = (LPCTSTR) s;
CStringにはまさにこれを行うキャスト演算子があるため、機能します。
TCHARを使用すると、コードがUnicodeに依存しなくなります。 Unicodeに関心がない場合は、char
の代わりにTCHAR
を使用できます。
CStringからLPCTSTRへの明示的なキャストがあるため、次のことができます(Unicodeが指定されていない場合)。
CString str;
// ....
const char* cstr = (LPCTSTR)str;
同様の問題がありました。持っていた char*
.so名の入ったバッファ。
変換できませんでしたchar*
変数からLPCTSTR
へ。ここに私がそれを回避する方法があります...
char *fNam;
...
LPCSTR nam = fNam;
dll = LoadLibraryA(nam);
ConvUnicode.hのTtoCを使用することをお勧めします
const CString Word= "hello";
const char* myFile = TtoC(path.GetString());
Unicodeごとに変換を行うマクロです
汎用変換マクロ(TN059その他の考慮事項セクションが重要です):
A2CW (LPCSTR) -> (LPCWSTR)
A2W (LPCSTR) -> (LPWSTR)
W2CA (LPCWSTR) -> (LPCSTR)
W2A (LPCWSTR) -> (LPSTR)