曲径通幽论坛

标题: wchar_t 类型 [打印本页]

作者: beyes    时间: 2011-9-5 12:08
标题: wchar_t 类型
wchar_t 是 C/C++ 的字符数据类型,是一种扩展的字符存储方式,不等同于Unicode编码,它用来显示更多的字符集。wchar_t 数据类型一般为16位或32位,但不同的 C 或 C++ 库有不同的规定。在 GNU LIBC 中 wchar_t 被规定为 32 位。


如再 linux 中,在使用 wchar_t 之前,需要包含 stddef.h 头文件。你也可以不用直接包含它,而包含常见的 stdlib.h 也可以,因为该头文件中已经包含了 stddef.h 。

stddef.h 头文件并不放在 /usr/include 这里,而是放在 gcc 相关的目录下,如再 Fedora 15 里,可以看到它的路径为:
/usr/lib/gcc/i686-redhat-linux/4.6.0/include/stddef.h

看一下 wchar_t 是怎么定义的:
[C++] 纯文本查看 复制代码

#ifndef __WCHAR_TYPE__
#define __WCHAR_TYPE__ int
#endif
#ifndef __cplusplus
typedef __WCHAR_TYPE__ wchar_t;
#endif

由此可见,wchar_t 在 Linux 里是 4 个字节的,实际上就是个 int 型,这可以用 sizeof(wchar_t) 来验证它的字节数。


但在 Windows 里,它被定义为 2 个字节的。我们看一下这个类型定义在哪。


当你安装好 VC 或者 Visual Studio 后,编程时需要的头文件就会放在这些编译器或 IDE 的相关目录下。比如在使用 Visual Studio 新建一个控制台程序时,它会事先包含 stdafx.h 头文件,而这个头文件里,又会包含 stdio.h 和 tchar.h 这两个头文件。在 tchar.h 头文件里又包含了crtdefs.h 头文件,在这个头文件里,我们看到定义:
[C++] 纯文本查看 复制代码

#ifndef _WCHAR_T_DEFINED
typedef unsigned short wchar_t;
#define _WCHAR_T_DEFINED
#endif  /* _WCHAR_T_DEFINED */

所以 wchar_t 在 Windows 里被定义为 unsigned short 类型,该类型长度为 2 个字节,共 16 位,这长度也可以通过 sizeof() 来验证。

由此可见,wchar_t 并不是一种如 char , int 之类的 ”原生类型“ 。
作者: easy    时间: 2013-7-2 19:19
wchar_t letter = L'Y';
这个语句定义了一个变量 letter,并利用字母 Z 的 16 位代码对它进行初始化。字符常量 'Z' 前面的字母 L 告诉编译器这是一个 16 位字符代码值。wchar_t 变量存储 Unicode 代码值。

还可以有下面的表示法:
wchar_t letter(L'z');  // 函数表示法

wchar_t letter(0x5A);




欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2