分享
 
 
 

《Windows 程序设计》学习笔记(二)

王朝vc·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

第二章 Unicode 介绍

本章简单介绍了Unicode的发展史,以及在Windows编程中的具体运用。对UNICODE的了解和运用对于进行国际化软件开发是非常重要。(特别是开发共享软件:)

Unicode在《微软英汉双解计算机百科辞典》里是这样解释的:一种16位的字符编码标准。它通过使用两个字节来表示一个字符,这样Unicode就可以用单个字符集来表示世界上几乎所有的书面语言。比较而言,8位的ASCII码就不能表示出罗马字母表中字母和可区分标记的所有组合。

Unicode的出现是计算机在全世界普及的必然结果。因为它是16位的,因此允许表示65536(2的16次方)个字符,这对表示所有字符及世界上使用的象形文字的语言,包括一系列的数学,符号和货币的集合来说是非常充裕的。前128个Unicode字符是ASCII,接下来的128个Unicode字符是ASCII的扩展,其余的字符供不同语言的文字和符号使用。Unicode把全世界所有的可能用到的文字和符号到统一到了一个字符集中,但是Unicode字符串占用的内存是ASCII字符串的两倍。(我觉得现在的硬件发展使这个问题已经不是很明显了。)

可以用wchar_t定义Unicode字符,

wchar_t c=’A’;

wchar_t在WCHAR.H中是这样定义的:

typedef unsigned short wchar_t;

也就是说它是16位的无符号短整型。注意’A’在内存是以0x41,0x00的顺序保存的。还可以定义一个Unicode字符数组,看下面的程序:

#include <windows.h>

#include <iostream.h>

void main()

{

wchar_t a = 'A';

cout << sizeof(a) << endl;

wchar_t* p = L"Hello!";

cout << sizeof(p) << endl;

static wchar_t b[] = L"Hello!";

cout << sizeof(b) << endl;

}

上面的程序在VC6.0下的运行结果是:

2

4

14

其中,p是一个指针,占用4个字节。

对于C++的操作运算符sizeof,因为是在编译时进行处理的,把Unicode字符看作是16位的短整型数据,所以可以正常运行。但对于大多数C++运行期库函数(特别是以字符串作为参数的函数)只有在连接时才进行处理,函数认为Unicode字符串由单字节字符组成,因此无法正常运行,需要新版的函数支持Unicode字符。

注:上面是我的初步理解,不知对不对。如果有理解不正的地方请高手执教。

下面的例子说明了Unicode字符对C++运行期库函数的影响:

#include <windows.h>

#include <string.h>

#include <iostream.h>

void main()

{

char* pc = "Hello!";

cout << strlen(pc) << endl; //适用于单字节字符

wchar_t * pw = L"Hello!";

// cout << strlen(pw) << endl; 在VC6.0下编译:error

cout << wcslen(pw) << endl; //适用于Unicode字符

}

运行结果:

6

6

为了使我们的程序即适用于单字节字符(Windows98 现在还有人用它吗?)又适用于Unicode字符(Windows2000,Windows XP也是吧?),可以用一些开关来进行编译时的设定。用的函数如果是ANSI C标准的,可以通过定义UNICODE来控制;如果不是ANSI C标准的可以通过定义_UNICODE来控制。例如下面的定义:

#ifdef UNICODE

#define MessageBox MessageBoxW //适用于Unicode字符

#else

#define MessageBox MessageBoxA //适用于单字节字符

#endif

同一个MessageBox函数在不同的设定中定义为不同的函数(MessageBoxW和MessageBoxA)。上面的UNICODE的定义可以在VC6.0的Project菜单中选择Setting,然后在C/C++中进行设定。

注:ASCII:American Standard Code for Information Interchang美国信息交换标准码

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有