可以通过流的方法来char*类型转换为wchar_t*类型,但这样的转换得到的结果将是const类型,而类似的方法不能将wchar_t*类型转换为char*类型。
对于纯英文字符串,可以直接复制,但不是复制指针,而是逐个字符复制,例如。
char *m="asaasasa";。
wchar_t p[9];
int i=0;
while(1)
p[i]=(wchar_t)m[i];。
if(m[i]=='\0')break;。
i++;
而对于带有非英文字符的字符串,则需要用到一些库函数来转换。有种省事的办法是这样的:
//还是上面的m和p
swprintf(p,L"%S",m);//%S标志符表示字符串的char与wchar_t相互转换。
至于string类,也可以直接按对应的char或wchar型字符串进行相同处理。
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 应该都知道的吧,一个是ANSI 一个是Unicode,同样的字符串,在内存中占用的内存大小不一样。如果手动用底层的API中的MultiByteToWideChar函数,要考虑是否溢出什么的。。。
我们公司都是这样用的,用微软现成的封装:
1:引入头文件 #include<atlconv.h>。
2:好了可以转换了
USES_CONVERSION //宏。
wchar_t *wp=A2W(p); //其中p为char *型数据 wp为转换后的wchar_t。
----------
OK 给分我吧
是不是应该是wchar_t类型啊。
如果是VS2005,你可以直接转的。
char转wchar_t很容易,只要在char变量前加'L'即可,例如:
wchar_t wc = L'c';。
wchar_t转char我不知道会不会有什么信息的丢失。
如果你想将wchar_t字符串转为char字符串的话可以参考这里:
http://topic.csdn.net/t/20010426/13/106005.html。
原文地址:http://www.qianchusai.com/char%E5%A6%82%E4%BD%95%E5%8F%98%E4%B8%BAwchar_t.html