BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #28738同步于 2009/9/19
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

WideCharToMultiByte问题

youziboy
2009/9/19镜像同步2 回复
客户端和服务器端都是用了UNicode, 那么在网络传输数据时候,我先将UNICODE,转换成非Unicdoe,然后收到数据后再转成UNICode。 如果数据都是字母和数字时候,用如下代码没有问题,但是如果有汉字的话,就会有问题了。 CString strInput = "Hello,北京"; int iLen = strInput.GetLength(); char* buff = new char[iLen+1]; ASSERT(buff); memset(buff , 0,iLen+1); int iRes = WideCharToMultiByte(CP_ACP , 0,strInput, iLen ,buff,iLen,NULL,NULL); WideCharToMultiByte 第3个参数是字符个数,这里应该是8 ; 第6个参数iLen是转换字符后的字节数目,这里应该是8+2 =10(汉字占用2个字节) 如果strInput 字符串均为字母和数字的话,字节数目就是字符个数 难道在使用WideCharToMultiByte之前,我需要自己计算出多字节下所占用的字节数目么?也就是先读取字符串strInput ,如果是汉字,就记住要占2个字节? 请指点!
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
huitailang机器人#1 · 2009/9/19
【 在 youziboy (柚子) 的大作中提到: 】 : 标 题: WideCharToMultiByte问题 : 发信站: 北邮人论坛 (Sat Sep 19 20:21:46 2009), 站内 : : 客户端和服务器端都是用了UNicode, : 那么在网络传输数据时候,我先将UNICODE,转换成非Unicdoe,然后收到数据后再转成UNICode。 : 如果数据都是字母和数字时候,用如下代码没有问题,但是如果有汉字的话,就会有问题了。 : CString strInput = "Hello,北京"; : int iLen = strInput.GetLength(); : char* buff = new char[iLen+1]; : ASSERT(buff); : memset(buff , 0,iLen+1); : int iRes = WideCharToMultiByte(CP_ACP , 0,strInput, iLen ,buff,iLen,NULL,NULL); : : WideCharToMultiByte 第3个参数是字符个数,这里应该是8 ; : 第6个参数iLen是转换字符后的字节数目,这里应该是8+2 =10(汉字占用2个字节) : 如果strInput 字符串均为字母和数字的话,字节数目就是字符个数 : : 难道在使用WideCharToMultiByte之前,我需要自己计算出多字节下所占用的字节数目么?也就是先读取字符串strInput ,如果是汉字,就记住要占2个字节? 我上面说过了,去看一下RFC 1014 - XDR : : 请指点! : -- : 9公里马拉松羞愧的准备中 : : ※ 修改:·youziboy 于 Sep 19 20:59:44 修改本文·[FROM: 211.71.15.*] : ※ 来源:·北邮人论坛 http://forum.byr.edu.cn·[FROM: 211.71.15.*]
newgen机器人#2 · 2009/9/20
唉 Cpp应该统一下了,STL一套,microsoft一套,有个string,又来个CString,标准是char,后来又来个wchar_t,大大降低了开发效率。指针也是,好不容易开发出一个大型程序,突然64位机又占据大半江山,以前在32位下开发的程序又可能出bug了。 【 在 youziboy (柚子) 的大作中提到: 】 : 客户端和服务器端都是用了UNicode, : 那么在网络传输数据时候,我先将UNICODE,转换成非Unicdoe,然后收到数据后再转成UNICode。 : 如果数据都是字母和数字时候,用如下代码没有问题,但是如果有汉字的话,就会有问题了。 : ...................