仅处理一个多字节字符或多字节字符的一个字节的任何 Microsoft MBCS 运行库例程需要一个 unsigned int
自变量(其中 0x0000 <= 字符值 <= 0xFFFF,0x00 <= 字节值 <= 0xFF)。 处理字符串上下文中的多字节的字节或字符的 MBCS 例程需要一个用 unsigned char
指针表示的多字节字符串。
注意
多字节字符的每个字节可用一个 8 位 char
表示。 但是,如果类型为 char
的 SBCS 或 MBCS 单字节字符的值大于 0x7F,则该值为负值。 将此类字符直接转换为 int
或 long
时,结果将由编译器进行符号扩展,因此可能产生意外的结果。
最好将多字节字符的一个字节表示为一个 8 位 unsigned char
。 或者,为避免产生负数结果,可在将 char
类型的单字节字符转换为 unsigned char
或 int
之前将其转换为 long
。
由于某些 SBCS 字符串处理函数采用(带符号的)char
* 参数,因此定义 _MBCS
时,编译器会发出类型不匹配的警告。 可通过三种方法来避免此警告(按效率高低的顺序列出):
使用 TCHAR.H 中的类型安全的内联函数。 此选项为默认行为。
通过在命令行上定义
_MB_MAP_DIRECT
,使用 TCHAR.H 中的直接宏。 如果这样做,则必须手动匹配类型。 此方法最快,但不是类型安全的。使用 TCHAR.H 中类型安全的静态链接的库函数。 为此,在命令行上定义常量
_NO_INLINING
。 此方法最慢,但类型安全性最高。