这是我的代码:
int main()
{
TCHAR x = 0x80;
printf("%X", x);
return 0;
}
如果在Visual Studio项目设置中使用“字符集=使用多字节字符集”,则会得到输出:
FFFFFF80
如果使用“字符集=使用Unicode字符集”构建的代码相同,则会提供正确的输出:
80
为什么会有这种不同的行为?
对于多字节字符集: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);