如果使用多字节字符集,为什么TCHAR值会改变?

问题描述 投票:0回答:1

这是我的代码:

int main()
{
    TCHAR x = 0x80;
    printf("%X", x);
    return 0;
}

如果在Visual Studio项目设置中使用“字符集=使用多字节字符集”,则会得到输出:

FFFFFF80

如果使用“字符集=使用Unicode字符集”构建的代码相同,则会提供正确的输出:

80

为什么会有这种不同的行为?

c++ visual-studio character-encoding
1个回答
0
投票

对于多字节字符集:TCHAR代表char。在Microsoft编译器中,char是8位类型。

对于Unicode字符集:TCHAR代表wchar_t。在Microsoft编译器中,wchar_t代表16位宽的字符

您看到的是“ FFFFFF”,因为char在系统上签名。在C语言中,诸如printf之类的函数会将所有小于int的整数提升为int。由于char是一个整数,因此您的char将通过符号扩展被提升为int。

由于“ 80”具有前导1位,因此正在对它们进行符号扩展。

我建议您可以尝试使用以下代码来掩盖高位,并仅保留所需的低8位。

    printf("%X", x & 0xFF);
© www.soinside.com 2019 - 2024. All rights reserved.