Cout 无符号字符

Cout unsigned char

我正在使用 Visual Studio 2019:为什么这个命令什么都不做?

std::cout << unsigned char(133);

它确实被我的编译器跳过了(我使用逐步调试验证了它): 我希望打印 à。 忽略下一个命令之前的每个输出,但不会忽略之前的输出。 (std::cout << "12" << unsigned char(133) << "34"; 打印“12”)

我也试过改成这些:

std::cout << unsigned char(133) << std::flush;
std::cout << (unsigned char)(133);
std::cout << char(-123);

但结果是一样的

我记得它以前工作过,我的一些使用这个命令的程序已经莫名其妙地停止工作了......在一个空白的新项目中同样的结果!

我认为我的新自定义键盘布局可能是原因,但禁用它并没有太大改变。

在其他在线编译器上它可以正常工作,所以它可能是 Visual Studio 2019?

的错误

你可以尝试使用static_cast

std::cout << static_cast<unsigned char>(133) << std::endl;

std::cout << static_cast<char>(133) << std::endl;

由于我的所有这些都在工作,所以很难查明问题所在,常识会指出一些配置问题。

"sane" 答案是:不要依赖扩展 ASCII 字符。 Unicode 的广泛使用足以使其成为首选方法:

#include <iostream>
int main() {
    std::cout << u8"\u00e0\n";
}

这将显式打印您请求的字符 à;事实上,这也是您的浏览器理解它的方式,您可以通过输入例如一些 unicode 字符搜索,这将导致 LATIN SMALL LETTER A WITH GRAVE,代码为 U+00E0,您可以在上面的代码中找到它。

在您的示例中,使用 signed 或 unsigned char 之间没有区别;字节值 133 被写入终端,但它解释它的方式可能因机器而异,具体取决于它实际设置解释它的方式。事实上,在 UTF-8 控制台中,这只是一个错误的 unicode 序列(u"[=14=]x85" 不是有效字符)——如果你的 OS 被切换到 UTF-8,这可能就是你的原因没有看到输出。