0

我有一个程序需要使用 Format(); 将字符串文字和 int 组合成 CString 变量的函数。我尝试了几种不同的方法,它们的代码在这里:

// declare variables used
CString _CString;
int _int;

// try to use format function with string literal
_CString.Format("text",_int); 

// try to use format function with C-Style cast
_CString.Format((wchar_t)"text",_int);

// try to use format function with static_cast 
_CString.Format(static_cast<wchar_t>("text"),_int);

第一个返回错误 C2664: 'void ATL::CStringT::Format(const wchar_t *,...)' : cannot convert parameter 1 from 'const char [33]' to 'const wchar_t *'

第二个,没有错误,但文本显示为汉字。

第三个返回错误 C2440: 'static_cast' : cannot convert from 'const char [33]' to 'wchar_t'

将 CStrings 转换为 wchar_t *s 的任何想法?
谢谢

4

3 回答 3

3

好吧,尚不清楚您要定位哪种字符串类型,但这是我要做的:

_CString.Format(_T("%d"), _int);

尝试将多字节字符串类型转换为 Unicode 字符串可能会编译,但它会自找麻烦,因为它仍然是多字节字符串。如果这是您想要的,您需要转换整个字符串,而不仅仅是对其进行类型转换。

于 2011-01-06T03:42:34.270 回答
2

问题是您正在执行 UNICODE 构建(这很好),所以

_CString.Format(); 

函数我期望第一个参数是一个宽字符串。您需要使用L""语法来形成宽字符串文字:

_CString.Format(L"text",_int); 

当然,您需要一个说明符才能将int变量格式化为 CString:

_CString.Format(L"text: %d",_int); 

如果包含tchar.h标题,则可以使用 Microsoft 的宏将字符串文字设为宽字符或常规旧字符(也称为 ANSI),具体取决于您是否构建 UNICODE:

_CString.Format(_T("text: %d)",_int); 

但我想说,除非您打算支持需要 ANSI 支持的遗留东西,否则我可能不会为这些tchar.h东西烦恼。

于 2011-01-06T06:03:53.387 回答
0

试试 mbstowcs 函数。 http://msdn.microsoft.com/en-us/library/ms235631(v=vs.80).aspx

于 2011-01-06T03:44:05.747 回答