c++中wchar_t与char转换
来源:互联网 发布:淘宝采集软件哪个好 编辑:程序博客网 时间:2024/04/28 19:44
环境:Dev cpp 平台i386
C++标准中,wchar_t是宽字符类型,每个wchar_t类型占2个字节,16位宽。汉字的表示就要用到wchar_t 。char,我们都知道,占一个字节,8位宽。其实知道了这个以后,要在wchar_t 和 char两种类型之间转换就不难实现了。
wchar_t 转换为char 的代码如下:
有如下的wchar_t和char变量
wchar_t w_cn = '中';
char c_cn[2] = {'0'} ;
char *C2W(wchar_t w_cn , char c_cn[2])
{
//following code convert wchar to char
c_cn[0] = w_cn >> 8 ;
c_cn[1] = w_cn ;
c_cn[2] = '\0';
return c_cn ;
}
其中需要注意的是一个16位的wchar_t需要用两个8位的char来存储之。我们可以发现另外一个问题,wchar_t的高位字节应该存储在char数组的低位字节。(这里没有仔细研究了,觉得怪怪的)。
这是完成了wchar_t到char的转化,char到wchar_t的转换类似。
C++中,你要想这样:cout<
string cn(c_cn);
cout<
这样就能正确的打印wchar_t字符了。是不是感觉好像做了好多事,但是完成的却是很简单的事情?呵呵,其实我也有同感,但是没有办法。更简单的办法,当然是直接用API(我一个是懒的去找了,二一个自己动手转换有些东西看的更清楚咯),但是这样的转换更灵活,在实际中应该会用到的。
有了以上的基础,下面给出wchar_t字符串到char字符串的转换代码:
char *W2C(const wchar_t *pw , char *pc)
{
//cout<<*pw<
*pc++ = *pw >> 8 ;
*pc = *pw ;
return 0 ;
}
char *wstr2cstr(const wchar_t *pwstr , char *pcstr, size_t len)
{
char *ptemp = pcstr ;
if(pwstr!=NULL && pcstr!=NULL)
{
size_t wstr_len = wcslen(pwstr) ;
len = (len > wstr_len ) ? wstr_len : len ;
while( len -- > 0)
{
W2C(pwstr , pcstr);
pwstr++ ;
pcstr +=2 ; //和我们开始说的一样+2,不是+1
}
*pcstr = '\0';
return ptemp ;
}
return 0 ;
rh5n.info;
haowe.info;
xn567.info;
sjkyt.info;
u6776.info;
w3399.info;
fgop9.info;
24564.info;
557766.info;
sfgrh.info;
qegd.info;
vdes.info;
nsdr.info;
rfdr.info;
dcw2.info;
khft.info;
dhte.info;
46fgd.info;
59fds.info;
bfde3.info;
hgfr3.info;
www.gsfea.info;
www.swzsa.info;
www.123wb.info;
www.ts235.info;
www.dt098.info;
www.sbr69.info;
www.xdfth.info;
www.dft2.info;
www.dvny6.info;
www.rh5n.info;
www.haowe.info;
www.xn567.info;
www.sjkyt.info;
www.u6776.info;
www.w3399.info;
www.fgop9.info;
www.24564.info;
www.557766.info;
www.sfgrh.info;
www.qegd.info;
www.vdes.info;
www.nsdr.info;
www.rfdr.info;
www.dcw2.info;
www.khft.info;
www.dhte.info;
www.46fgd.info;
www.59fds.info;
www.bfde3.info;
www.hgfr3.info;
}
上面就是代码,测试:
int main(int arg , char *argv[])
{
wchar_t pwstr[] = {'我' , '是' , '中' , '国' , '人'};
char *pcstr = (char *)new char[2 * wcslen(pwstr)+1] ;
memset(pcstr , 0 , 2 * wcslen(pwstr)+1 );
wstr2cstr(pwstr , pcstr , wcslen(pwstr)) ;
str.assign (pcstr);
cout<
delete []pcstr ;
}
- 转载:c++中wchar_t与char转换
- c++中wchar_t与char转换
- VC 中char 与 wchar_t的转换
- wchar_t与char转换
- wchar_t与char转换
- wchar_t与char转换
- wchar_t与char转换
- wchar_t与char转换
- wchar_t与char转换
- wchar_t与char转换
- char 与wchar_t 转换
- wchar_t与char转换
- char 与 wchar_t 转换
- char 与 wchar_t转换
- wchar_t 与 char的转换
- 也谈C++中char*与wchar_t*之间的转换
- C++中char*与wchar_t*之间的转换
- 谈C++中char*与wchar_t*之间的转换
- Humble Numbers
- C#在WinCE平台上的相关技巧
- 儿童性侵案-3
- System.Data.SqlClient.SqlException: Login failed for user
- cookie
- c++中wchar_t与char转换
- onInterceptTouchEvent和onTouchEvent调用时序
- HDU 3836&&HDU2767 强连通
- 视频编码格式详解
- Github之更新fork过来的项目学习笔记
- 的很少见啊恒大金卡斯的绝杀空间
- wireshark使用方法及其RTP H.264视频数据格式解析
- 解决“Maven项目中的Dynamic Web Module 3.0 requires Java 1.6 or newer”问题
- 程序员的自我修养(1)——操作系统篇