vc中如何读取字符串中的汉字

syq13 2009-12-13 03:57:45
CString str1="张三123456789";
int len=str1.GetLength();
char *pchar=new char[len];
for (int i=0;i<len;i++)
{
pchar[i]=(char)str1[i];
}

为什么在字符数组pchar中前几个元素不是汉字张三呢?
...全文
352 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
cynthiamoonbeen 2010-08-06
  • 打赏
  • 举报
回复

我曾经看过说ANSI都是由2个字节表示的,其中最高位为1的是汉字,最高位为0的是英文。所以我区分字符串“I am a 中国人”时用其中一个字符的二进制形式&0X80来区分。但是结果呢,输出的是“I am a 烫烫烫烫烫烫... ...”,不知道为什么,郁闷
Eleven 2009-12-13
  • 打赏
  • 举报
回复
IsDBCSLeadByte
石头--- 2009-12-13
  • 打赏
  • 举报
回复
很容易.
你把字符串里的所有字节都输出看看就明白了.

ANSI字符是小于128的.unicode的就大于128了.

如果是汉字的话,他是两个字节的.一旦发现当前值大于128后就把后面的那一位合并读取.

不过如果VC中,你是以UNICODE编译程序那就完全没这个顾虑了,直接读取.
zhangrenhui 2009-12-13
  • 打赏
  • 举报
回复
当然不是,汉字存放需要两个字节,pchar[]只能存放一个字节,
ivgwt 2009-12-13
  • 打赏
  • 举报
回复
pchar用wchar_t*是不是也可以啊。
superyangtze 2009-12-13
  • 打赏
  • 举报
回复
你试试这段代码:
	CString str1="张三123456789"; 
int len=str1.GetLength();
char *pchar=new char[5];
for (int i=0;i <4;i++)
{
pchar[i]=(char)str1[i];
}
pchar[4]='\0';
CString msg;
msg.Format("%s", pchar);
AfxMessageBox(msg);
xdshao 2009-12-13
  • 打赏
  • 举报
回复
使用unicode

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧