Windows字符编码
1.扩展ASCII编码,当用一个字节来保存字符,则可以由128个附加字符来补充ASCII
代码页定义了字符的映射代码。最初的IBM字符集被称作代码页437代码页850就是"MS-DOS Latin 1"它用于附加的带重音字母代替一些线性字符。其他代码页被其他语言定义。最低的128个代码总是相同的,较高的128个代码取决于定义代码页的语言。
2.采用双字节字符集容纳语言和ASCII编码之间的兼容性。最初的128个代码是ASCII,然而较高的128个代码中的某些总是跟随者第二个字节。这两个字节一起定义一个字符,通常是一个复杂的象形文字。
3.双字符集问题并不是说字符由两个字节代表。问题在于一些字符由1个字节表示。这些会引发附加的编程问题。例如:字符串中的字符数不能用字符串的字节数决定,必须剖析字符串才能决定其长度,而且必须必须检查出每个字节以确定它是否为双字节字符的首字节。
4.Unicode是统一的16位系统,这样就允许表示65536个字符。Unicode中的每个字符都是16位宽而不是8位宽,在Unicode中8位没有意义。相比之下,在双字节字符集中我们仍然处理8位数值,有些字节自身定义一个字符,而有的字节则需要和另一个字节共同定义一个字符。Unicode使用的是宽字符集。
5.多字节字符集主要影响c运行时库函数,相比之下,宽字符比正常字符宽,而且会引起一些编译问题。宽
字符不需要Unicode。Unicode是一种可能的宽字符编码,然而因为本书的焦点是Windows而不是c运行理论,所以我将把宽字符和Unicode作为同义语。
6.Intel处理器首先从最低位字节开始存储多字节数值,所以该字节实际上是以:0x41,0x00的顺序保存在内存中
5.Unicode最大的好处是这里只有一个字符集,没有一点含糊
6.Unicode的缺点在于Unicode字符串占用的存储器的是ASCII字符串的两倍
7.在c语言中使用宽字符兼容Unicode,使用宽字符的时候,strlen函数应该使用它对应的宽字符版本:wcslen
8.改成宽字符以后,字符串的字符长度不改变,只是字节长度改变了。
9.wprintf是printf的宽字符版本
10.windows实现的字符串处理函数:
llength=lstrlen(pstring)unicode所有字符
pstring=lstrcpy(pstring1,pstring2)
pstring=lstrcpyn(pstring1,pstring2,iCount)
pstring=lstrcat(pstring1,pstring2)
iComp=lstrcmp(pstring1,pstring2)
iComp=lstrcmpl(pString1,pString2)
11.使用sprintf有一个负担,你必须面对的一个问题是定义的字符串缓冲区必须足够大用来存储输出的数据。Microsoft专用函数_snprintf解决了这一问题,此函数引进了另一个参数,并以字符数表示出了缓冲区的大小。12.vsprintf函数是sprintf函数的一个变形,vsprintf有三个参数,vsprintf的前两个参数与sprintf相同:一个用于保存结果的字符缓冲区和一个格式字符串,第三个参数是指向格式化参数数组的指针
13.在宽字符串版的sprintf函数中,字符串缓冲区被定义宽字符串,在宽字符版的所有这些函数中,格式化字符串必
须是一个宽字符串,同时必须确保所有传递给这些函数的其他字符串也必须由宽字符组成。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。