库特无符号字符
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的错误吗?
"理智"的答案是:不要依赖扩展的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;
由于在我的所有工作中,所有这些都在工作,因此很难确定问题所在,常识会指出一些配置问题。
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- C++中无符号字符溢出
- 使用无符号字符数组有效存储内存
- 在 std::无符号字符的向量处存储 int 的十六进制表示形式
- 如何在保持其值的同时将 c++ 无符号字符变量转换为 char 变量
- 从 std::vector<无符号字符>切片中提取 int?
- 将无符号字符的向量存储在数组中会给我 std::bad_alloc
- 使用 fopen 打开 .pak 文件并使该文件应用于 const 无符号字符* (C++)
- 库特无符号字符
- 寻找一种更好的方法来表示无符号字符数组
- C++ 无符号字符 *{varName};-> C#
- 如何返回/复制unique_ptr<无符号字符[]>的值?
- 将浮点数转换为无符号字符数组并打印出来
- 在函数中返回无符号字符数组,但不返回指针
- 如何在 C/C++ 中将无符号字符*转换为无符号字符数组?
- 如何返回实际值(在我的例子中是无符号字符数组)而不是来自 C++ 函数的指针?
- 如何将带有十六进制值的 std::string 转换为 std::vector<无符号字符>
- 无符号字符打印其 ASCII 值
- 字符数组到无符号字符 *
- 是否可以在 c++ 中将两位数保存在无符号字符中