宽字符:每个字符统一占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(" "); 14 15 setlocale(LC_ALL,""); //此句必须要加上 16 //宽字符串转多字符串 17 printf("wcstombs:宽字符串转多字符串 "); 18 printf("源宽字符串:%ls, 长度:%d ", wstr, wcslen(wstr)); 19 len = (int)wcstombs(NULL, wstr, 0) + 1; //获取目标字符串的长度 最后+1是为了存储结束符' ' 20 mst = (char *)malloc(sizeof(char) * len); //为存储多字符串分配空间 21 wcstombs( mst, wstr, len); //转换 22 printf("目标字符串的理论长度:%d ", len - 1); 23 printf("目标字符串的实际长度:%d ", strlen(mst)); 24 printf("转换结果:%s ",mst); 25 free(mst); //释放内存 26 27 printf(" "); 28 29 //多字符串转宽字符串 30 printf("mbstowcs:多字符串转宽字符串 "); 31 printf("源多字符串:%s, 长度:%d ", mstr, strlen(mstr)); 32 len = (int)mbstowcs(NULL, mstr, 0) + 1; //获取转换后宽字符串的长度 最后+1是为了存储结束符' ' 33 wst = (wchar_t *)malloc(sizeof(wchar_t) * len); //为存储宽字符串分配空间 34 mbstowcs(wst, mstr, len); //转换 35 printf("目标字符串的理论长度:%d ", len - 1); 36 printf("目标字符串的实际长度:%d ",wcslen(wst)); 37 printf("转换结果:%ls ",wst); 38 free(wst); //释放内存 39 40 return 0; 41 }
运行结果: