宽字符与多字符相互转换

宽字符:每个字符统一占4个字节, sizeof(wchar_t) = 4,编码格式为Unicode。

多字符:对于字符和数字,每个字符占1个字节,每个汉字占3个字节。sizeof(char) = 1, sizeof(汉字) = 3,编码格式为GBK

多字符串与宽字符串之间的转换:代码示例如下:

 1 #include <stdio.h>
 2 #include <wchar.h>
 3 #include <stdlib.h>
 4 #include <string.h>
 5 #include <locale.h>
 6 
 7 int main()
 8 {
 9     wchar_t *wstr = L"abcd一二三四", *wst;
10     char *mstr="五六七八xyz", *mst;
11     int len = 0;
12 
13     printf("\n");
14      
15     setlocale(LC_ALL,"");                         //此句必须要加上
16     //宽字符串转多字符串
17     printf("wcstombs:宽字符串转多字符串\n");
18     printf("源宽字符串:%ls, 长度:%d\n", wstr, wcslen(wstr));
19     len = (int)wcstombs(NULL, wstr, 0) + 1;        //获取目标字符串的长度 最后+1是为了存储结束符'\0'
20     mst = (char *)malloc(sizeof(char) * len);    //为存储多字符串分配空间
21     wcstombs( mst, wstr, len);                    //转换
22     printf("目标字符串的理论长度:%d\n", len - 1);        
23     printf("目标字符串的实际长度:%d\n", strlen(mst));
24     printf("转换结果:%s\n",mst);
25     free(mst);                                    //释放内存
26 
27     printf("\n");
28 
29     //多字符串转宽字符串
30     printf("mbstowcs:多字符串转宽字符串\n");
31     printf("源多字符串:%s, 长度:%d\n", mstr, strlen(mstr));
32     len = (int)mbstowcs(NULL, mstr, 0) + 1;            //获取转换后宽字符串的长度 最后+1是为了存储结束符'\0'    
33     wst = (wchar_t *)malloc(sizeof(wchar_t) * len);    //为存储宽字符串分配空间
34     mbstowcs(wst, mstr, len);                        //转换
35     printf("目标字符串的理论长度:%d\n", len - 1);
36     printf("目标字符串的实际长度:%d\n",wcslen(wst));
37     printf("转换结果:%ls\n",wst);
38     free(wst);                                        //释放内存
39 
40     return 0;
41 }

运行结果:

 

 

 

posted @ 2014-03-02 21:03  ★行云流水★  阅读(1678)  评论(0编辑  收藏  举报