SBCS 和 MBCS 数据类型

仅处理一个多字节字符或多字节字符的一个字节的任何 Microsoft MBCS 运行库例程需要一个 unsigned int 自变量(其中 0x0000 <= 字符值 <= 0xFFFF,0x00 <= 字节值 <= 0xFF)。 处理字符串上下文中的多字节的字节或字符的 MBCS 例程需要一个用 unsigned char 指针表示的多字节字符串。

注意

多字节字符的每个字节可用一个 8 位 char 表示。 但是,如果类型为 char 的 SBCS 或 MBCS 单字节字符的值大于 0x7F,则该值为负值。 将此类字符直接转换为 intlong 时,结果将由编译器进行符号扩展,因此可能产生意外的结果。

最好将多字节字符的一个字节表示为一个 8 位 unsigned char。 或者,为避免产生负数结果,可在将 char 类型的单字节字符转换为 unsigned charint 之前将其转换为 long

由于某些 SBCS 字符串处理函数采用(带符号的)char* 参数,因此定义 _MBCS 时,编译器会发出类型不匹配的警告。 可通过三种方法来避免此警告(按效率高低的顺序列出):

  1. 使用 TCHAR.H 中的类型安全的内联函数。 此选项为默认行为。

  2. 通过在命令行上定义 _MB_MAP_DIRECT,使用 TCHAR.H 中的直接宏。 如果这样做,则必须手动匹配类型。 此方法最快,但不是类型安全的。

  3. 使用 TCHAR.H 中类型安全的静态链接的库函数。 为此,在命令行上定义常量 _NO_INLINING。 此方法最慢,但类型安全性最高。

另请参阅

国际化
按类别分的通用 C 运行时例程