因此CharLower
的文档说它也可以转换单个字符,即:
如果此参数的高位字为零,则低位字必须包含要转换的单个字符。
这让我感到困惑,因为如果高阶词应该被清零,这意味着CharLower()
只能转换U + 0000到U + FFFF范围内的字符。但是更高范围的角色呢?我是否必须首先将它们转换为LPTSTR
并将其传递给CharLower()
然后或者这应该如何工作?
答案 0 :(得分:5)
文件的完整引用如下:
以null结尾的字符串,或指定单个字符。如果此参数的高位字为零,则低位字必须包含要转换的单个字符。
此参数解释为:
wchar_t
值。这是可能的原因是存储器地址< 65536被保留并被视为无效指针。要在此单字符模式下使用该功能,您可以这样称呼它:
WCHAR chr = (WCHAR) CharLowerW((WCHAR*)L'A');
然后你问:
这让我很困惑,因为如果高阶词应该为零,这意味着
CharLower()
只能转换U + 0000到U + FFFF范围内的字符。但是更高范围的角色呢?我是否必须首先将它们转换为LPTSTR
并将其传递给CharLower()
然后或者这应该如何工作?
这是对的。在单字符模式下,不支持代理对。您必须将它们作为以null结尾的字符串传递。
可以合理地猜测,这个界面可以追溯到Windows支持UCS-2的日子,UCS-2是UTF-16的前置光标。 UCS-2是一个固定长度的编码,只支持代码点< = U + FFFF,并且没有出现您描述的问题。 UTF-16为代码点添加了代理> U + FFFF。这种界面设计很全面,虽然有点笨拙。