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 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汉字问题的主要内容,如果未能解决你的问题,请参考以下文章