曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 6608|回复: 1
打印 上一主题 下一主题

wchar_t 类型

[复制链接]

4917

主题

5879

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34382
跳转到指定楼层
楼主
发表于 2011-9-5 12:08:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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 之类的 ”原生类型“ 。

716

主题

734

帖子

2946

积分

超级版主

Rank: 9Rank: 9Rank: 9

积分
2946
沙发
发表于 2013-7-2 19:19:17 | 只看该作者
wchar_t letter = L'Y';
这个语句定义了一个变量 letter,并利用字母 Z 的 16 位代码对它进行初始化。字符常量 'Z' 前面的字母 L 告诉编译器这是一个 16 位字符代码值。wchar_t 变量存储 Unicode 代码值。

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

wchar_t letter(0x5A);
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2024-4-28 11:25 , Processed in 0.069118 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表