CString.Format汉字问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CString.Format汉字问题相关的知识,希望对你有一定的参考价值。

wchar_t a[4]=L'你',L'好',L'吗',L'?';
wchar_t b;
CString str,str1;
for(int i=0;i<4;i++)

b=a[i];
str.Format(L"%c",b);
str1+=str;

m_edit.SetWindowText(str1);
欲在编辑框将字符显示出来.但是VC6中报错
error C2664: 'void __cdecl CString::Format(const char *,...)' : cannot convert parameter 1 from 'unsigned short [3]' to 'const char *'
何解?

wchar_t a[5]=L'你',L'好',L'吗',L'?';
wchar_t b;
CString str,str1;
for(int i=0;i<4;i++)

b=a[i];
a[5]=0;

WideCharToMultiByte(CP_ACP,0,a,256,str.GetBuffer(256),256,NULL,NULL);
str.ReleaseBuffer(256);;
// str.Format(L"%c",b);
str1+=str;

m_edit.SetWindowText(str1);
参考技术A 把下面这段加入Onchar中,调试中看到汉字时nFlags 为0,做个累加判断就可以了。原理是如果是汉字的画加两次才是汉字,否则是字符。

static int i = 1;
static CString cs;

if ( 0 == nFlags )

if ( 2 == i )

// 此处即是得到的汉字。
cs += nChar;
i = 1;
TRACE( "char:%C, RepCount:%d,Flags:%d, cs:%s\n", nChar, nRepCnt, nFlags, cs );

else

i ++;
cs = nChar;



补充:

将cs += nChar;
修改为:

cs += (char) nChar;
参考技术B 简单来说 VC++ 6.0支持Unicode编程,但默认的是ANSI,
具体的解决不好说 给你一个链接 看看别人说的吧
http://apps.hi.baidu.com/share/detail/22990546

在 C++ 中转换类型时出错

【中文标题】在 C++ 中转换类型时出错【英文标题】:Error converting types in C++ 【发布时间】:2011-06-04 10:25:29 【问题描述】:

我有一个程序需要使用 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 的任何想法? 谢谢

【问题讨论】:

这太挑剔了,但从技术上讲,您不应该使用带有下划线后跟大写字母的名称来命名变量。这些名称由实现保留用于他们感觉的任何用途(包括任意的邪恶宏)。只是想我会提到这个作为仅供参考。 【参考方案1】:

嗯,目前尚不完全清楚您要定位哪种字符串类型,但这是我要做的:

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

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

【讨论】:

【参考方案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 的东西。

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于CString.Format汉字问题的主要内容,如果未能解决你的问题,请参考以下文章

CString::Format 的替代方案?

C++问题,怎么把char数组以ASCII码赋值给CString

CString .Format

CString.Format 以相同的精度生成不同的值

VC++中CString.Format函数的问题

给定 %d 时,VC++ 6.0 应用程序在 CString::Format 内崩溃