一个困扰我的问题:怎样从char型汉字字符串中得到wchar_t型的汉字。

ryuli 2003-07-16 11:16:26
如:char ch[]="一个问题";
我想得到wchar_t型的第二个汉字:wchar_t wch='个';
我尝试用过MultiByteToWideChar和AllocSysString
但我发现他们只对数字或者英文有效果。我想这两个函数只是把char字符串中的单个字符简单的扩充长度,八位变成十六位,高八位补上零。这样对占两字节的汉字是无效的。
所以我想请各位老鸟提供个思路:怎样从char型汉字字符串中得到wchar_t型的汉字。

...全文
52 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
fixopen 2003-07-16
  • 打赏
  • 举报
回复
char ch[] = "一些汉字";
wchar_t cch = 0;

for (int i = 0; i < sizeof(ch); ++i)
{
if (i % 2) //even
cch = ch[i] << 8 | ch[i + 1];
//cch = ch[i + 1] << 8 | ch[i];
}
ryuli 2003-07-16
  • 打赏
  • 举报
回复
谢谢DEVZHAO和BLUEBOHE兄,这个问题基本解决,现在看来也简单,纯粹数学问题。还是我平时缺少钻研精神,什么事就指望MSDN。

to:devzhao 你说的ch[0]*256+ch[1]如果改成(ch[0]+1)*256+ch[1]就对了,但仍非常感谢你提供的思路

个人以为宽字符主要是牵涉到汉字时使用。因为wchar_t或者USHORT等才可以完全表示一个汉字,都是16位。是不是很肤浅?呵呵,我是菜鸟
1cs1ak1 2003-07-16
  • 打赏
  • 举报
回复



ch=(*p)*255+*(p+1); //
应为这样吗?
(*p)<<8 | *(p+1)


ryuli 2003-07-16
  • 打赏
  • 举报
回复
谢谢,正在研究ing……
devzhao 2003-07-16
  • 打赏
  • 举报
回复
char ch[]="一个问题";
实际上是由ch[0]和ch[1]存“一”,即每个汉字两个字节
将ch[0]*256+ch[1]可变为16位,
1cs1ak1 2003-07-16
  • 打赏
  • 举报
回复



windows编程里讲过宽字符,不过一直都不以为然,没仔细看过。
到现在为止我还没用过宽字符,可能是水平不够吧。
楼主能否讲一下什么地方用到。


1cs1ak1 2003-07-16
  • 打赏
  • 举报
回复



windows编程里讲过宽字符,不过一直都不以为然,没仔细看过。
到现在为止我还没用过宽字符,可能是水平不够吧。
楼主能否讲一下什么地方用到。



bluebohe 2003-07-16
  • 打赏
  • 举报
回复
你研究一下这个程序拉,能够解决你的问题
int main(int argc, char* argv[])
{
char *str="abc一个问题def";
char *p=str,*p1;
unsigned short ch;
while(strcmp(p,"")!=0)
{
p1=CharNextExA(936,p,0);
int i=p1-p;
if(i==1)
{
ch=(unsigned char)*p;
}else if(i==2)
{
ch=(*p)*255+*(p+1);
}
p=p1;


}
return 0;
}

1cs1ak1 2003-07-16
  • 打赏
  • 举报
回复



windows编程里讲过宽字符,不过一直都不以为然,不知什么地方用得到。
好像到现在为止我还没用到,可能是鄙人水平不够吧。
搂主能否讲讲他的用处。



bluebohe 2003-07-16
  • 打赏
  • 举报
回复
呵呵,这可是我经过了三年的文字编程,最后从公司辞职后呆在家里才总结出来的。
我的MSN是gazxtzg@hotmail.com,我上班的时间一般都在线的
ryuli 2003-07-16
  • 打赏
  • 举报
回复
邮箱,jjryu@163.net,QQ 14272692,愿和所有志同道合者交朋友
ryuli 2003-07-16
  • 打赏
  • 举报
回复
严重感谢薄荷兄给我的例子程序!!!薄荷兄告诉我你的邮箱或者QQ,交我这个菜鸟朋友吧

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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