转载连接:https://www.cnblogs.com/zhangdewang/p/11420410.html和https://www.cnblogs.com/lanhaicode/p/10574260.html
一、窄字符char与宽字符wchar_t的区别
(1)窄字符char,占1个字节
char的范围有两种:
signed char:带符号,取值范围(-128-127);
unsigned char:不带符号,取值范围(0-255)。
赋值方法:
char cStr[20] = "Hello world!";
(2)宽字符wchar_t ,占2个字节
wchar_t是Unicode字符的数据类型,它实际定义为:
typedef unsigned short wchar_t;
赋值方法:
wchar_t wcStr[20] = L"Hello world!";
窄字符相比,前面多了一个大写的L,这个L的作用就是告诉编译器,这个字符串按照宽字符来存储(一个字符占两个字节)。
二、宽字符wchar_t和窄字符char相互转换
(1)窄字节转换成宽字节
扫描二维码关注公众号,回复:
8461195 查看本文章
描述
C 库函数 size_t mbstowcs(schar_t *pwcs, const char *str, size_t n) 把参数 str 所指向的多字节字符的字符串转换为参数 pwcs 所指向的数组。
声明
下面是 mbstowcs() 函数的声明。
size_t mbstowcs(schar_t *pwcs, const char *str, size_t n)
参数
- pwcs -- 指向一个 wchar_t 元素的数组,数组长度足以存储一个最大字符长度的宽字符串。
- str -- 要被转换的多字节字符字符串。
- n -- 要被转换的最大字符数。
返回值
该函数返回转换的字符数,不包括结尾的空字符。如果遇到一个无效的多字节字符,则返回 -1 值。
(2)宽字节转换成窄字节
描述
C 库函数 size_t wcstombs(char *str, const wchar_t *pwcs, size_t n) 把宽字符字符串 pwcs 转换为一个 str 开始的多字节字符串。最多会有 n个字节被写入 str 中。
声明
下面是 wcstombs() 函数的声明。
size_t wcstombs(char *str, const wchar_t *pwcs, size_t n)
参数
- str -- 指向一个 char 元素的数组,至少有 n 字节长。
- pwcs -- 要被转换的宽字符字符串。
- n -- 要被写入到 str 中的最大字节数。
返回值
该函数返回转换和写入到 str 中的字节数,不包括结尾的空字符。如果遇到一个无效的多字节字符,则返回 -1 值。