将CString转换为const char *

时间:2009-05-13 17:31:35

标签: c++ visual-studio visual-c++ unicode mfc

如何在我的Unicode MFC应用程序中从CString转换为const char*

8 个答案:

答案 0 :(得分:64)

要将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

答案 1 :(得分:20)

如果您的CString是Unicode,则需要转换为多字节字符。幸运的是,有一个CString版本会自动执行此操作。

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

答案 2 :(得分:15)

注意:此答案早于Unicode要求;看到评论。

投下它:

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

这很有效,因为CString有一个强制转换运算符。

使用TCHAR使您的代码与Unicode无关;如果您不关心Unicode,则只需使用char代替TCHAR

答案 3 :(得分:4)

CString到LPCTSTR有一个显式的强制转换,所以你可以这样做(如果没有指定unicode):

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

答案 4 :(得分:1)

我有类似的问题。我有一个char*缓冲区,里面有.so名称。
我无法将char*变量转换为LPCTSTR。这是我如何解决它......

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

答案 5 :(得分:0)

我建议你使用ConvUnicode.h的TtoC

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

这是一个按Unicode执行转换的宏

答案 6 :(得分:0)

通用转换宏(TN059其他注意事项部分很重要):

A2CW     (LPCSTR)  -> (LPCWSTR)  
A2W      (LPCSTR)  -> (LPWSTR)  
W2CA     (LPCWSTR) -> (LPCSTR)  
W2A      (LPCWSTR) -> (LPSTR) 

答案 7 :(得分:0)

我使用了这种转换:

CString cs = "TEST";
char* c = cs.GetBuffer(m_ncs me.GetLength())

我希望这是有用的。