windows中的字符串类型

合集下载

五,字符串类型和列表类型详解

五,字符串类型和列表类型详解

五,字符串类型和列表类型详解⼀、字符串类型 str类型,包含在' '," ",''' '''内的字符(' '," ",''' '''还可⽤于注释,''' '''可换⾏)。

str()可将其他类型转化为字符串类型 取值:按索引取值,str[索引]为正向取,str[-索引]为反向取。

只能取,不能赋值 切⽚:按索引切⽚。

str[起点:终点:⽅向+步长] 顾头不顾尾。

步长不加默认为1 长度:len(str)字符串字符数 in/not in:判断⼀段字符在不在字符串中 str.strip(' '):去掉字符串两边的字符,若不加则默认去除空格 str.split('|',1):以括号内字符为分割点,将字符串分割为多个存⼊列表。

逗号后的数字指从左往右分割⼏次. str.rsplit('|',2):从右往左分割两次 for 循环遍历字符串 lower:全部转化为⼩写 upper:全部转化为⼤写 startswith:判断⼀个字符串是否以⼀段字符为起始,返回布尔值 endswith:判断⼀个字符串是否以⼀段字符为结束,返回布尔值 format:类似于格式化输出'my name is %s ,my age is %s'%('papa',18) 'my name is {name},my age is {age}'.format(name='papa',age='18') 'my name is {},my age is {}'.format('papa','18') 'my name is {0},my age is {1}'.format('papa','18') join:split的反向操作,将⼀个列表以某个分割符拼接为⼀段字符串.msg='|'.join(li) replace:将字符串中的某段字符替换为另⼀段字符.msg.replace('a','b') isdigit:判断⼀段字符是否为纯数字,如果为纯数字,则返回True,反之则返回False find,rfind,index,rindex,count: find与index都是查找字符串内是否有某⼀段字符,可以加查找范围,rfind为从右往左查找,如msg.rfind('aa',0,5) find与index的区别:find找不到则返回None,index找不到则报错 count为计算字符串中⼀段字符出现的次数 center,rjust,ljust,zfill: 'papa'.center(50,'*'),将字符串放在⾃定义个数的个字符中间,原字符也算⼊个数之中 rjust,同理,将字符串放在右边 ljust,同理,将字符串放在左边 zfill,同理,将字符串放在多个0后⾯ expandtabs:'a\tb'.expandtabs(10),制表符\t转为多个空格 captalize,swapcase,title: captalize:字符串⾸字母变⼤写 swapcase:字符串⼤⼩写互换 title:空格后每⼀个单词⾸字母⼤写 isnumeric,isdecimal,isdigit: 与isdigit同理,isnumeric可判断中⽂与罗马数字,以及⼆进制 isdecimal只能判断数字字符 isdigit可判断⼆进制与数字字符 isalpha:判断字符中是否全部为字母与中⽂字符 isalnum:判断是否包含的全部为字母或数字 总结: 存⼀个值 有序 不可变⼆、列表类型 list [ ]内⽤逗号隔开多个元素,元素可以是任意类型 切⽚,与字符串⽤法相同,顾头不顾尾. 长度len(),与字符串⽤法相同 in 与 not in :与字符串⽤法相同 增加 list.append(新元素):追加 list.insert(索引,新元素):前往指定索引插⼊新元素 删除 del list[索引]:直接删除 res=list.remove(元素): 删除元素,返回None res=list.pop(索引):默认从末尾开始删,返回删除的值 for循环与字符串同理 lIst.count:计算⼀个元素的出现次数 list.index:查找,与字符串同理 list.clear:清空列表 list.extend(items):遍历items,将items⼀个个添加到list中 list.reverse:将列表反序 nums.sort(reverse=True):将数字列表中的数字从⼤到⼩排列,reverse=False则反之 总结: 存多个值 有序 可变。

Windows程序中的字符编码

Windows程序中的字符编码

Windows程序中的字符编码写这篇文章的起因是这么一个问题:我们在使用和安装Windows程序时,有时会看到以“2052”、“1033”这些数字为名的文件夹,这些数字似乎和字符集有关,但它们究竟是什么意思呢?研究这个问题的同时,又会遇到其它问题。

我们会谈到Windows的内部架构、Win32 API的A/W函数、Locale、ANSI代码页、与字符编码有关的编译参数、MBCS和Unicode程序、资源和乱码等,一起经历这段琐碎细节为主,间或乐趣点缀的旅程。

0 Where is Win32 APIWindows 程序有用户态和核心态的说法。

在32位地址空间中,0x80000000以下属于用户态,0x80000000以上属于核心态。

所有硬件管理都在核心态。

用户态程序的不能直接使用核心态的任何代码。

所谓核心态其实只是CPU的一种保护模式。

在x86 CPU上,用户态处于ring 3,核心态处于ring 0。

从用户态进入核心态的最常用的方法是在寄存器eax填一个功能码,然后执行int 2e。

这有点像DOS时代的DOS和BIOS系统调用。

在NT架构中这种机制被称作system service。

在核心态提供system service的有两个家伙:ntoskrnl.exe和win32k.sys。

ntoskrnl.exe是Windows的大脑,它的上层被称为Executive,下层被称作Kernel。

Win32k.sys提供与显示有关的system service。

在用户态一侧,有一个重要的角色叫作ntdll.dll,大多数system service都是它调用的。

它封装这些system service,然后提供一个API接口。

这个接口被称作native API。

native API的用户是各个子系统(subsystem),包括Win32子系统、OS/2子系统、POSIX子系统。

各个子系统为Win32、OS2、POSIX程序提供了运行平台。

win10编码格式

win10编码格式

Win10编码格式1. 什么是编码格式?编码格式是指计算机系统用于表示和处理文本字符的规则。

计算机只能理解二进制数据,而文本字符是人类可读的形式。

因此,需要一种方式将文本字符转换为计算机可以理解的二进制数据,这就是编码格式的作用。

编码格式定义了字符与二进制数据之间的映射关系。

不同的编码格式使用不同的映射规则,因此可以表示不同的字符集和语言。

在Win10系统中,有多种编码格式可供选择,以满足不同语言和字符集的需求。

2. Win10支持的编码格式Win10系统支持多种编码格式,包括但不限于以下几种:2.1 ASCII编码ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是最早的一种字符编码格式,它使用7位二进制数表示128个字符,包括英文字母、数字和一些特殊字符。

ASCII编码只能表示英文字符,对于其他语言的字符则无法表示。

2.2 Unicode编码Unicode是一种全球字符集标准,它定义了世界上几乎所有字符的唯一编码。

Unicode编码使用16位或32位二进制数表示字符,因此可以表示几乎所有语言的字符。

在Win10系统中,常用的Unicode编码格式是UTF-8和UTF-16。

•UTF-8编码:UTF-8是一种变长编码格式,可以用1至4个字节表示一个字符。

它兼容ASCII编码,对于英文字符使用1个字节表示,对于其他字符使用多个字节表示。

UTF-8编码在互联网上广泛应用,是一种通用的编码格式。

•UTF-16编码:UTF-16也是一种变长编码格式,可以用2或4个字节表示一个字符。

UTF-16编码在存储和处理大量字符时更高效,但对于英文字符来说相对浪费空间。

2.3 GBK编码GBK编码是一种中文字符集编码格式,它是GB2312编码的扩展。

GBK编码使用2个字节表示一个字符,可以表示大部分中文字符。

在Win10系统中,GBK编码常用于处理中文文本。

windows1252编码表

windows1252编码表

windows1252编码表Windows-1252编码表,也称为Latin-1,是一种字符编码标准,用于在Windows操作系统中表示字符集。

它是ISO-8859-1标准的超集,包含了ISO-8859-1中未定义的一些字符。

Windows-1252编码表使用单字节编码,每个字符占用8个比特(1个字节)。

它支持包括英语、法语、德语、西班牙语、葡萄牙语等在内的许多欧洲语言。

下面是Windows-1252编码表的字符范围及其对应的Unicode码点:0x00-0x7F: 基本ASCII字符,与Unicode一致。

0x80: €(欧元符号)。

0x81: 未定义。

0x82: ‚(单引号逗号)。

0x84: …(双引号逗号)。

0x85: …(省略号)。

0x86: †(十字架)。

0x87: ‡(双十字架)。

0x88: ˆ(抑扬符)。

0x89: ‰(千分号)。

0x8A: Š(拉丁大写字母S,帽子符号)。

0x8B: ‹(左尖括号)。

0x8C: Œ(拉丁大写字母OE)。

0x8D: 未定义。

0x8F: 未定义。

0x90: 未定义。

0x91: ‘(左单引号)。

0x92: ’(右单引号)。

0x93: “(左双引号)。

0x94: ”(右双引号)。

0x95: •(实心圆点)。

0x96: –(短破折号)。

0x97: —(长破折号)。

0x98: ˜(波形符号)。

0x99: ™(商标符号)。

0x9A: š(拉丁小写字母s,帽子符号)。

0x9B: ›(右尖括号)。

0x9C: œ(拉丁小写字母oe)。

0x9D: 未定义。

0x9E: ž(拉丁小写字母z,冠符号)。

0x9F: Ÿ(拉丁大写字母Y,分音符号)。

0xA0: (不间断空格)。

0xA1: ¡(倒感叹号)。

0xA2: ¢(美分符号)。

0xA3: £(英镑符号)。

0xA4: ¤(通用货币符号)。

0xA5: ¥(日元符号)。

windows的编码格式

windows的编码格式

windows的编码格式
Windows操作系统支持多种编码格式,其中最常见的是ANSI和Unicode。

ANSI编码是一种较早期的字符编码格式,它使用一个字节来表示一个字符。

ANSI编码在不同的地区使用了不同的字符映射表,比如在西欧地区使用的是ISO-8859-1编码,而在东亚地区使用的是GB2312或者Big5编码。

ANSI编码的一个缺点是它不支持多语言字符集,因此在处理多语言文字时可能会出现乱码或者无法显示的问题。

为了解决ANSI编码的限制,Windows引入了Unicode编码。

Unicode 编码使用两个字节来表示一个字符,可以支持全球范围内的字符集。

Windows操作系统默认使用的是UTF-16编码,它是Unicode编码的一种实现方式。

UTF-16编码可以表示几乎所有的字符,包括不同语言的文字、符号、表情等。

Unicode编码的优点是它可以提供全球范围内的字符支持,但缺点是在存储和传输时需要更多的空间和带宽。

除了ANSI和Unicode编码,Windows还支持其他一些编码格式,比如UTF-8和UTF-32。

UTF-8编码是一种变长编码,它可以使用一个到四个字节来表示一个字符,具有较高的灵活性和兼容性,适用于在互联网上传输和存储文本。

UTF-32编码则使用四个字节来表示一个字符,每个字符都占用相同的空间,适用于在内存中处理文本。

在Windows操作系统中,编码格式的选择通常取决于具体的需求和应用场景。

对于只包含英文字符的文本,可以选择使用ANSI编码以节省空间。

对于多语言文本或者需要在不同的地区使用的应用程序,推荐使用Unicode编码,特别是UTF-8编码。

mfc的精度单位

mfc的精度单位

mfc的精度单位MFC(Microsoft Foundation Class)是微软提供的一套C++类库,用于开发Windows应用程序。

在MFC中,精度单位是指用于表示数据精度和格式化输出的单位。

以下是MFC 中常用的精度单位及其说明:1. 整型(Integer)* 用于表示整数类型的数据,包括short、int、long等。

* 默认情况下,整型数据以十进制形式输出,也可以通过格式化字符串指定其他进制。

2. 浮点型(Float)* 用于表示单精度浮点数,精度比双精度浮点数低。

* 默认情况下,浮点数以小数点形式输出,也可以通过格式化字符串指定其他格式。

3. 双精度型(Double)* 用于表示双精度浮点数,精度比单精度浮点数高。

* 默认情况下,双精度数以小数点形式输出,也可以通过格式化字符串指定其他格式。

4. 货币型(Currency)* 用于表示货币值,具有更高的精度和特定的格式。

* 默认情况下,货币值以特定格式输出,也可以通过格式化字符串进行自定义。

5. 日期和时间型(Date/Time)* 用于表示日期和时间值,具有特定的格式和精度。

* 默认情况下,日期和时间值以特定格式输出,也可以通过格式化字符串进行自定义。

6. 字符串型(String)* 用于表示文本数据,可以包含字母、数字、特殊字符等。

* 默认情况下,字符串以文本形式输出,也可以通过格式化字符串进行自定义。

7. 布尔型(Boolean)* 用于表示逻辑值,只有真(true)和假(false)两种状态。

* 默认情况下,布尔值以文字形式输出。

8. 二进制型(Binary)* 用于表示二进制数据,通常用于文件操作和网络通信等场景。

* 默认情况下,二进制数据以十六进制形式输出,也可以通过格式化字符串指定其他进制。

9. 其他类型(Other Types)除了以上常见的类型外,MFC还支持其他一些特殊类型和自定义类型,例如结构体、联合体、类等。

tchar用法

tchar用法

tchar用法TCHAR用法TCHAR是Windows API中的一个数据类型,它是一个宏定义,可以根据编译器的不同而被定义为char或wchar_t类型。

在Windows编程中,TCHAR类型的使用非常广泛,本文将从不同的角度介绍TCHAR的用法。

一、TCHAR的定义TCHAR是一个宏定义,它的定义如下:#ifdef _UNICODEtypedef wchar_t TCHAR;#elsetypedef char TCHAR;#endif根据编译器的不同,TCHAR可以被定义为char或wchar_t类型。

如果编译器定义了宏_UNICODE,则TCHAR被定义为wchar_t类型;否则,TCHAR被定义为char类型。

二、TCHAR的作用TCHAR的作用是在不同的编译器和操作系统中实现代码的兼容性。

在Windows编程中,TCHAR类型的使用非常广泛,它可以用来表示字符、字符串、文件名等。

例如,如果我们要在Windows中打开一个文件,可以使用以下代码:TCHAR szFileName[MAX_PATH];GetOpenFileName(&ofn);在这个例子中,szFileName是一个TCHAR类型的数组,用来存储用户选择的文件名。

GetOpenFileName函数是Windows API中的一个函数,它可以打开一个文件选择对话框,让用户选择一个文件。

三、TCHAR与字符串在Windows编程中,TCHAR类型的字符串也非常常见。

我们可以使用TCHAR类型的字符串来表示文件名、路径名等。

例如,如果我们要在Windows中创建一个目录,可以使用以下代码:TCHAR szDirName[MAX_PATH];CreateDirectory(szDirName, NULL);在这个例子中,szDirName是一个TCHAR类型的字符串,用来表示要创建的目录名。

CreateDirectory函数是Windows API中的一个函数,它可以创建一个目录。

windows批处理学习(for和字符串)---03

windows批处理学习(for和字符串)---03

windows批处理学习(for和字符串)---03【1】for命令简介 先把for循环与for命令类⽐⼀下,这样学习理解快。

for 循环语句,⼀般格式如下:1 for (表达式1;表达式2;表达式3)2 {3 循环体;4 } 1. 表达式1 ⼀般为初始状态赋值表达式,给控制变量赋初值。

2. 表达式2 ⼀般为关系表达式或逻辑表达式,为循环控制条件。

3. 表达式3 ⼀般为每次执⾏循环体后向控制变量重新赋值的表达式(给控制变量增量或减量)。

4. 语句:循环体,⼀般为复合语句(即可能需要执⾏多条语句)。

举个实例:1 for (int i=0; i < 100; ++i)2 {3 cout << i << endl;4 } for 命令,⼀般格式如下: 在cmd窗⼝中使⽤格式:FOR %variable IN (set) DO command [command-parameters] 在批处理脚本中使⽤格式:FOR %%variable IN (set) DO command [command-parameters] 1. 在cmd窗⼝中使⽤,变量名必须⽤单%引⽤(即:%variable);在批处理脚本中使⽤,变量名必须⽤双%引⽤(即:%%variable)。

2. for、in和do是for命令的三个关键字,缺⼀不可。

3. 关键字in之后,do之前的括号不能省略。

举个实例:新建⼀个⽂本⽂件,命名为fordemo,修改⽂件类型为bat,⽤Notepad++打开编辑内容为:1 @echo off2 for %%i in (1 234 5) do @echo %%i3 pause>nul 执⾏结果: 嗯哼,原来for命令就这么简单?嗨,同学,不要浮躁,保持冷静,更要理智。

下⾯,且看对上例语句的分析: 从命令组成结构由左向右剖析,除过关键字,依次分别为: 1. 变量名为i,i太简单,作为变量名不具备见名知意的特点。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Windows字符串类型C++主要使用的是C-Style字符串,而M$在Windows中又增加了很多C-Style字符串的变体。

这个一多嘛,就容易乱~所谓字符串,就是由字符组合而成,所以我们先来将将字符类型。

首先,存在两种最基本的字符类型:char和wchar_t。

char大家都很熟悉了,我就跳过。

至于wchar_t,是应用于UNICODE的宽字符,即一个字符2Bytes,16Bits。

事实上,Windows 中利用typedef unsigned short wchar_t定义wchar_t然后为了书写方便(MS我也没觉得有多大差别),M$又把那两个基本字符类型重新的给他typedef了一遍,即:typedef char CHARtypedef wchar_t WCHAR为了使得兼容性更加,M$又定义了TCHAR数据类型:#ifdef UNIOCDEtypedef WCHAR TCHAR#elsetypedef CHAR TCHAR#endif这样,你不用关心是要使用ANSI字符串还是Unicode,编译器会自动根据你的OS来选择。

然后,M$又利用上面的几种基本数据类型,定义了一些字符串指针类型。

LPSTR和LPCSTR:LPSTR是指向以0结尾的ANSI字符串的指针,后者是const指针typedef CHAR* LPSTRtypedef const CHAR* LPCSTRLPWSTR和LPCWSTR:LPWSTR是指向以0结尾的UNICODE字符串的指针,后者是const 指针typedef WCHAR* LPWSTRtypedef const WCHAR* LPCWSTR同样,为了摆脱对ANSI还是UNICODE的选择麻烦,M$也增加了LPTSTR和LPCTSTR两个字符串指针类型。

他们被如下定义:typedef TCHAR* LPTSTR#ifdef UNICODEtypedef LPWSTR LPTSTR#elsetypedef LPSTR LPTSTR#endif/////////////////////////////////////typedef const TCHAR* LPCTSTR#ifdef UNICODEtypedef LPCWSTR LPCTSTR#elsetypedef LPCSTR LPCTSTR#endifps:你会在某些地方看到存在PSTR/PWSTR/PTSTR等等,与上面的只却一个L的字符串指针类型。

实际上,这个是长指针和短指针问题。

LPXX是长指针,PXX是短指针。

不过在32Bit 的系统上,二者已经没有区别。

然后说说两个比较成熟好用的字符串类型:String和CStringString是C++的标准字符串,需要string(不带.h)头文件和std名字空间支持。

CString是M$为MFC设计的字符串,功能更加强大,而且这玩意儿是安全的。

需要atlstr.h 文件和MFC DLL的支持。

不过目前已经有人将此类型从MFC中分离~为了增强程序的通用性,还必须注意以下几点:1、既然程序里不能出现char,那表示字符串时,就不能再习惯性的用char*了。

应该改为TCHAR*,或者是PTSTR。

后一种是 windows的变量,类似的有:PSTR、PTSTR、LPTSTR、LPSTR、PCTSTR等等等等。

这也是让人一开始接触会头大的地方。

其实并非如此恐怖,我以PCTSTR为例做个解释:P代表指针(和LP是一个东西,LP的本意是Long Pointer,16位windows时代的遗留物。

),C代表const,T代表TCHAR,STR代表字符串。

所以PCTSTR 其实就是const TCHAR* 的意思。

而PSTR也就是char* 的意思。

所以我们在表示字符串时也不能使用PSTR等不带T的变量类型名。

2、表示字符串常量时,不能简单的用双引号括起来,因为那代表ascii字符串。

同样也不能在前面加L,因为那代表unicode。

我们的程序要做到的是通用性,即不是ascii也不是unicode。

所以我们在字符串前应该加的是TEXT,比如MessageBox(NULL,TEXT("Fypher"),TEXT("FF"),MB_OK)。

TEXT还可用于字符。

比如TCHAR m=TEXT('A');3、TCHAR FF[50]。

FF能装多少字符?哈!不要习惯性的sizeof(FF)了,应该_countof(FF)或者sizeof(FF)/sizeof(TCHAR)。

因为我们不确定TCHAR到底是char 还是 wchar_t。

4、该和一堆老朋友说再见了……我们不能再使用以前的字符串处理函数或者字符处理函数了。

比如strlen、strcat、strcmp等等等等……因为这些是ascii专用的,通通改成使用T家族的吧。

前缀都换成_tcs。

比如_tcslen、_tcscat、_tcscmp等等……顺便补充一下wcs前缀是wchar_t使用的。

恩,还有大家用得超爽的sprintf,今后就改成_stprintf了吧~呵呵。

补充:swprintf是 wchar_t它家的。

对了,windows认为_tcscpy、_tcscat等不安全,所以使用这些函数编译器会报警。

可以改用windows推出的 _tcscpy_s、_tcscat_s等“安全”函数,其实就是多了个参数用来指明缓冲区大小(记得用_countof哦~!^_^)。

windows 还推出了形如StringCchCat的一套字符串处理函数,我没怎么用过。

windows也有一个字符串比较函数CompareString。

功能比 _tcscmp强大多了。

比如可以设置忽略大小写等。

5、IsTextUnicode函数可以用过一系列统计学的方法判断某个字符串是不是unicode字符串。

MultiByteToWideChar和WideCharToMultiByte函数可实现Ascii和Unicode字符串的相互转化。

这些的使用场合都不大。

因为我们的程序应该做到“没有”ascii和unicode。

6、虽然绝大多数情况下应该使用TCHAR,但是记住GetProcAdress这个特殊的函数吧,它的参数只能是char*。

因为在导出函数表里函数名是用ascii码写的……7、最后一点,记得要#include <tchar.h>哦!呵呵~ 由于windows内核采用的是UNICODE,UNICODE版的程序必然比ASCII版的程序效率高(比如不用在调用函数时在堆里分配空间把参数转成 UNICODE,然后再调用UNICODE版的函数),所以我们最好是在程序的开头加上#define UNICODE和#define _UNICODE,把程序转换成UNICODE版的。

如果程序的字符串处理完全按照上面的通用性要求做了是不会出错的。

8、注意:str前缀与wcs前缀都是标准C函数,需要有标准C运行库才能够使用。

而lstr 前缀的是window提供的原生函数,不需标准C运行库。

9、如何对Unicode进行操作?字符集特性实例ANSI 操作函数以str开头 strcpyUnicode 操作函数以wcs开头 wcscpyMBCS 操作函数以_mbs开头 _mbscpyANSI/Unicode 操作函数以_tcs开头 _tcscpy(C运行期库)ANSI/Unicode 操作函数以lstr开头 lstrcpy(Windows函数)所有新的和未过时的函数在Windows2000中都同时拥有ANSI和Unicode两个版本。

ANSI 版本函数结尾以A表示;Unicode版本函数结尾以W表示。

Windows会如下定义:#ifdef UNICODE#define CreateWindowEx CreateWindowExW#else#define CreateWindowEx CreateWindowExA#endif // !UNICODEVC++中TCHAR、MBCS等字符类型Visual C++支持多字节字符集 (MBCS)多字节字符集 (MBCS) 是一种替代 Unicode 以支持无法用单字节表示的字符集(如日文和中文)的方法。

为国际市场编程时应考虑使用 Unicode 或 MBCS,或使程序能够通过更改开关来生成支持两种字符集之一的程序。

最常见的 MBCS 实现是双字节字符集 (DBCS)。

一般来说,Visual C++(尤其是 MFC)完全支持 DBCS。

有关示例,请参见 MFC 源代码文件。

对于语言使用大字符集的市场所使用的平台,代替 Unicode 的最佳方法是 MBCS。

MFC 通过使用可国际化的数据类型和 C 运行时函数来支持 MBCS。

您也应在自己的代码中这样操作。

在 MBCS 下,字符被编码为单字节或双字节。

在双字节字符中,第一个字节(即前导字节)表示它和下一个字节将被解释为一个字符。

第一个字节来自留作前导字节的代码范围。

哪个范围的字节可以用作前导字节取决于所使用的代码页。

例如,日文代码页 932 使用 0x81 到 0x9F 范围内的字节作为前导字节,而朝鲜语代码页 949 则使用其他范围的字节。

在 MBCS 编程中需考虑下列所有因素。

环境中的 MBCS 字符MBCS 字符可以出现在文件名和目录名等字符串中。

编辑操作MBCS 应用程序上的编辑操作应在字符上操作,而非在字节上操作。

插入符号不应拆分字符,向右键应向右移动一个字符等。

Delete应删除一个字符;Undo则应将字符重新插入。

字符串处理在使用 MBCS 的应用程序中,字符串处理引起特殊问题。

两种宽度的字符混合在一个字符串中;因此必须记住检查前导字节。

运行时库支持C 运行时库和 MFC 支持单字节、MBCS 和 Unicode 编程。

单字节字符串用str运行时函数族处理,MBCS 字符串用相应的_mbs函数处理,而 Unicode 字符串用相应的wcs函数处理。

MFC 类成员函数的实现使用可移植运行时函数,这些可移植运行时函数在正常情况下映射到标准str函数族、MBCS 函数或 Unicode 函数,如“M BCS/Unicode 可移植性”中所述。

MBCS/Unicode 可移植性使用 Tchar.h 头文件可以用同一个源生成单字节的 MBCS 应用程序和 Unicode 应用程序。

Tchar.h 定义以_tcs为前缀的宏,这些宏根据相应的情况映射到str、_mbs或wcs函数。

若要生成 MBCS,请定义_MBCS符号。

若要生成 Unicode,请定义_UNICODE符号。

默认情况下,为 MFC 应用程序定义的是_MBCS。

相关文档
最新文档