因此,CharLower
的文档说它也可以转换单个字符,即:
如果此参数的高阶单词为零,则低阶单词必须包含要转换的单个字符。
这让我感到困惑,因为如果高阶单词应为零,这意味着CharLower()
只能将U 0000范围内的字符转换为U FFFF。但是,较高范围的角色呢?我是否必须先将其转换为LPTSTR
,然后将其传递给CharLower()
,或者应该如何工作?
文档中的完整报价如下:
一个无效的字符串,或指定一个字符。如果此参数的高阶单词为零,则低阶单词必须包含要转换的单个字符。
此参数被解释为:
- 指向零终止字符串或 的指针
- 单个
wchar_t
值。
这是可能的原因是内存地址<65536被保留并被视为无效的指针。要在此单个字符模式下使用该函数,您将其称为:
WCHAR chr = (WCHAR) CharLowerW((WCHAR*)L'A');
您然后问:
这让我感到困惑,因为如果高阶单词应为零,这意味着
CharLower()
只能将U 0000范围内的字符转换为U FFFF。但是,较高范围的角色呢?我是否必须先将其转换为LPTSTR
,然后将其传递给CharLower()
,或者应该如何工作?
这是正确的。在单个字符模式下,不支持替代对。您必须将其作为零终止的字符串传递。
可以合理地猜测该接口的历史可以追溯到Windows支持UCS-2的日子,UCS-2是UTF-16的前护士。UCS-2是一个固定的长度编码,仅支持CodePoints< = U FFFF,并且您描述的问题没有出现。UTF-16添加了编码点> U FFFF的替代物。此界面设计是全面的,尽管有些笨拙。