【问题标题】:C++ cout binary value [duplicate]C ++ cout二进制值[重复]
【发布时间】:2014-08-05 21:16:44
【问题描述】:

我有一个问题,我有一组无符号字符,我想打印它们,但是当我使用 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

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

最好的问候

【问题讨论】:

  • 让我猜猜。你在 Windows 上。控制台正在使用CP-437,而您用来读取文件的程序正在使用Windows-1252。这两个字符具有相同的数字表示,但解释不同。
  • @chris 甚至还有一个SO answer
  • 我非常不同意the linked duplicate question 也回答了这个问题。链接的问题是关于不可打印的 ASCII 字符,而这个问题是关于 extended ASCII 字符集。链接的问题与代码页无关,而这正是这里的问题。不幸的是,由于这个原因,我没有足够的代表投票重新开放。

标签: c++ binary cout


【解决方案1】:

你是code pages的受害者。

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

通过使用未使用的第 8 位,可以使用 128 到 255 的值执行某些操作。问题是,很多人同时考虑过这一点,因此系统显示这些前 128 位的方式有很多种字符,适用于许多不同的语言。

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

就像 chrisπάντα ῥεῖ 评论的那样,Windows 控制台使用的代码页 (code page 437) 与使用 Windows-1252 的大多数 Windows 控制台不同。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-03
    • 2012-10-05
    • 1970-01-01
    • 2020-08-12
    • 2017-03-19
    • 2020-05-26
    • 2012-08-19
    相关资源
    最近更新 更多