charlower()和字符宽于16位



因此,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的替代物。此界面设计是全面的,尽管有些笨拙。

最新更新