控制台功能wincon.h
的Windows API部件定义了一个数据结构CHAR_INFO
,如下所示:
typedef struct _CHAR_INFO {
union {
WCHAR UnicodeChar;
CHAR AsciiChar;
} Char;
WORD Attributes;
} CHAR_INFO, *PCHAR_INFO;
所以我们有一个8位和16位字符的并集,分别表示ASCII和Unicode字符。通常,如果您必须处理C中的联合,则您已标记了联合,即存在一个额外字段,指示正在使用哪个联合字段。这不是这种情况(Attributes
用于不同的东西),所以我想知道如何正确使用这种数据类型的值。
如果我们看看API的哪些功能实际上使用了这个或类似的结构,我们发现它仅由存在于两个变体中的函数使用:后缀为A
(对于ASCII变体),或者后缀为W
(对于Unicode变体)。
因此,可以假设这些函数的A
变体仅使用此结构的AsciiChar
字段,而W
变体仅使用UnicodeChar
字段?如果没有,您如何知道实际使用的字段以及如何将一个字段转换为另一个字段? MSDN documentation似乎没有说明正确用法。