首页 > 其他 > 详细

宽字符与多字符相互转换

时间:2014-03-03 16:46:24      阅读:486      评论:0      收藏:0      [点我收藏+]

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

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

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

bubuko.com,布布扣
 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 }
bubuko.com,布布扣

运行结果:
bubuko.com,布布扣

宽字符与多字符相互转换,布布扣,bubuko.com

宽字符与多字符相互转换

原文:http://www.cnblogs.com/cmembd/p/3577280.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!