c++计算二进制值

C++ cout binary value

本文关键字:二进制 计算 c++      更新时间:2023-10-16

我有一个问题,我有一个无符号字符数组,我想打印它们,但是当我使用cout时,打印的值不同。

该数组包含二进制格式的值,没有0和1,但使用字符表示。

数组输出:

[0] 147 unsigned char
[1] 252 'ü' unsigned char
[2] 170 'ª' unsigned char
[3] 194 'Â' unsigned char
[4] 108 'l' unsigned char

我得到了什么:

ô
ⁿ
¬
┬
l

当我将其写入文件时,表示是正确的,因为我以二进制模式打开ofstream,但我找不到如何在cout中做同样的事情。

你是代码页的受害者。

在过去的日子里,我们所关心的只是简单的英语字符。对于这些字符,我们定义了ASCII字符集。它定义了128个字符(0到127十进制),可打印字符从32开始(空格)。方便的是,ASCII字符集适合7位。

通过使用未使用的第8位,可以处理128到255的值。问题是,很多人同时想到了这一点,所以有很多不同的方式来显示这前128个字符,对于许多不同的语言。

最终所有这些都标准化了。前128个字符在任何地方都是相同的,但128及以上的字符在代码页中定义。

就像chris和π α ντα ρ ε ε ν注释的那样,Windows控制台使用了一个不同的代码页(代码页437),而Windows的其他大部分使用Windows-1252。

总之,您的输出是正确的,因为输入和输出的十进制值是相同的,但它看起来是错误的,因为您在不同的代码页中查看它们。