Unicode与C 重点摘要-Windows程序设计第二章上

关键名词部分:

Unicode: Unicode 扩展自 ASCII 字元集
ASCII 美国资讯交换标准码 American Standard Code for Information Interchange Size:7 位元
ISO: 国际标准化组织 (ISO:International Standards Organization)
内码:11010001 10100111 存储在计算机内部的二进制编码
双位元组字元集 DBCS:double-byte character set
指向宽字串的指标:wchar_t * p = L"Hello!" ;
L(代表「long」)。这将告诉编译器该字串按宽字元保存 字符串结束标志\0占用两个字节

兼容双字节函数:

iLength = strlen § ;//报错
size_t __cdecl wcslen (const wchar_t *) ;

iLength = wcslen( p);//宽字节版

wcslen(); //include<tring.h/WCHAR.H>

size_t __cdecl wcslen (const wchar_t *) ;

微观意识:

字串「Hello!」中的 6 个字元占用 16 位元:
0x0048 0x0065 0x006C 0x006C 0x006F 0x0021 0x0000
Intel 处理器在记忆体中将其存为:(大小端)
48 00 65 00 6C 00 6C 00 6F 00 21 00 00 00

处理方式

使用 Microsoft Visual C++包含的 TCHAR.H 表头档案。该表头档案不是 ANSI C 标准的一部分,因此那里定义的每个函式和巨集定义的前面都有一条底线_

TCHAR.H 为需要字串参数的标准执行时期程序库函式提供了一系列的替代名称(例如,_tprintf 和_tcslen),它们既可以指向函式的 Unicode 版也可以指向非 Unicode 版。
TEXT(“XXX”);兼容Unicode 与 非Unicode
有:_UNICODE && WCHAR.H
那么_tcslen 就定义为 wcslen:#define _tcslen wcslen
如果没有定义 UNICODE,则_tcslen 定义为 strlen:#define _tcslen strlen

核心部分代码:

typedef wchar_t TCHAR ;

#define __T(x) L##x
这是相当晦涩的语法,但合乎 ANSI C 标准的前置处理器规范。那一对井字号称为「粘贴符号(token paste)」,它将字母 L 添加到字符串上。因此,如果巨集引数是"Hello!",则 L##x 就是 L"Hello!"。

#define _TEXT(x) __T(x)
本地,必须按下述方法在_T 或_TEXT 巨集内定义字串文字:_TEXT (“Hello!”)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值