库特无符号字符

Cout unsigned char

本文关键字:字符 无符号      更新时间:2023-10-16

我正在使用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的错误吗?

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

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

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

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

你可以尝试使用static_cast

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

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

由于在我的所有工作中,所有这些都在工作,因此很难确定问题所在,常识会指出一些配置问题。