《windows核心编程》第2章 UNICODE字符

编程入门 行业动态 更新时间:2024-10-10 18:30:20

《windows核心编程》第2章 UNICODE<a href=https://www.elefans.com/category/jswz/34/1771063.html style=字符"/>

《windows核心编程》第2章 UNICODE字符

一、基础内容

1.1 UNICODE和UTF-8

下面是我个人的理解

UNICODE用2个字节来代表一个字符

UTF-8用1-4个字节来表示一个字符。可变长度的实现原理是ASCII字符只有7位,首位如果是1表示不是ASCII,说明这个字符和后面的字符联合起来形成新字符。

1.2 字符的数据类型

UNICODE类型的字符都是宽字符,在C语言中的数据类型是:wchar_t,这是一个基本数据类型

用宏TEXT()可以兼容宽字符和char字符。如果在程序中定义了UNICODE,那么会把TEXT()中的字符认为是wchar_t*;如果没定义,则把TEXT()中的字符认为是char*

同样的,根据是否定义UNICODE,接收用TCHAR

1.3 测试

1、没有定义UNICODE

2、定义了UNICODE

3、控制台打印宽字符会有错误

(1) Windows的控制台根据系统非UNICODE编码及位置的设置,控制台在输出中文时默认是GBK编码,控制台输出UTF8字符会变成乱码。采用宽字符输出,这样就避免了控制台字符集的问题

(2) 控制台宽字符显示有个必要的条件:控制台的字体应当支持宽字符。将控制台的代码页修改为
437(OEM-United States),默认的Lucida Console字体支持宽字符,使用_setmode来设置标准输出为_O_U16TEXT

二、使用安全字符串

我们编程的时候,尽量使用安全字符串,例如strcpy就是一个非安全函数,当你在程序中使用这个函数的时候,你就会发现,编译器会出现警告,同时会提示我们使用strcpy_s函数

三、补充函数

3.1 wcslen()

求宽字符串长度的函数 wcslen(TEXT("str.."));

3.2 stringCchCat()

将一个字符串连接到另一个字符串

HRESULT stringCchCat(__inout LPTSTR pszDest,__in size_t cchDest,__in LPCTSTR pszSrc
);

pszDest:目标字符串 

cchDest:目标字符串内存大小

pszSrc:源字符串

3.3 StringCchPrintf()

这是一个字符串拷贝函数,在strsafe.h中

HRESULT stringcchprintf(__out LPTSTR pszDest,__in size_t cchDest,        // 目标内存大小.__in LPCTSTR pszFormat,__in ...
);

这个函数和printft函数用法类似,只是将字符写入了psDest内存块中

3.4 字符串比较函数

compareString()和compareStringOrdinal()

3.5 宽字符与多字符之间的转换

int Multi ByteTowideChar(__in UINT CodePage,__in DWORD dwFlags, __in LPCSTR lpMultiByteStr,__in int cbMultiByte,__out LPWSTR lpwideCharstr,__in int cchwideChar
);int wideCharToMultiByte(__in UINT CodePage,__in DWORD dwFlags, __in LPCWSTR lpWideCharstr,__in int cchwideChar,__out LPSTR lpMu1tiBytestr,__in int cbMultiByte, __in LPCCH lpDefaultChar,__out LPBOOL lpUsedDefaultChar

更多推荐

《windows核心编程》第2章 UNICODE字符

本文发布于:2023-12-05 23:37:38,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1665740.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:字符   核心   windows   UNICODE

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!