【问题标题】:Converting ASCII numerical character to actual character将 ASCII 数字字符转换为实际字符
【发布时间】:2014-01-07 15:26:17
【问题描述】:

我正在学习 ASCII,以及它如何编码字符。据我了解(虽然我可能错了,因为我还在学习),是 ASCII 将数字编码为字符。例如,像这样:

0011 0000 = 30 = '0'(这是一个编码字符)

0000 0000 = 0 = 0(虽然这是一个实际数字)

表示两种不同类型的零编码。

问题

有没有办法显示 ASCII char 数据类型的真实数字?

我尝试了以下代码:

#include <iostream>

int main(void) {

    char e = '0';

    std::cout << e << std::endl;
    std::cout << sizeof(e) << std::endl;

    std::cin.get();
    std::cin.get();

return 0;
}

我知道这段代码并不接近我想要完成的结果;然而,这就是我能想到的。我需要更好地理解如何通过 C++ 语法来完成这种转换

另外,请原谅我的任何误导信息或标题。我还在学习编程的“绳索”。

【问题讨论】:

  • "ASCII 将数字编码为字符" - 反过来... ASCII 将字符编码为数字。 (您不会将数字“编码”为 ASCII,因为通常您会混入带有控制字符的垃圾文本,这对任何人都没有用,但是我们必须对文本进行一些编码才能在计算机内部传递它。 ) 你离得太近了!
  • 所有字符编码,而且还有很多,不只是ASCII,都是用数字来表示字符的。

标签: c++ binary hex ascii


【解决方案1】:

char 转换为int

std::cout << static_cast<int>(e);

char 实际上已经是一个整数,只是operator&lt;&lt; 的重载将char 显示为一个字符。通过使用强制转换将类型更改为int,我们将调用不同的运算符重载,它被写入显示为整数。

【讨论】:

  • 很好的解释,但是这样做会导致 Char 变量 'e' 成为程序其余部分的 int 数据类型吗?
  • @Jake2k13:不。此操作对e 变量没有影响。它创建一个新的、临时的、未命名的int 变量,具有相同的值。
【解决方案2】:

据我了解,您希望将实际值存储在内存中,即 '0'=0x30=48。在内存中char 数据类型也存储为整数,但采用 8 位格式。因此,如果您使用 int 类型转换变量,那么您将获得整数格式的存储值,而不是 Ascii char。

#include <iostream>

int main(void) {

    char e = '0';

    std::cout << (int)e << std::endl;
    std::cout << sizeof(e) << std::endl;

    std::cin.get();
    std::cin.get();

return 0;
}

【讨论】:

  • +1。只是作为对 OP 和其他读者的进一步解释,static_cast&lt;int&gt;(e) 是一种新的 C++ 唯一方法来请求转换,如果“e”不是此转换的合理类型,则会生成编译器错误,而 @ 987654324@ 是从 C 语言继承而来的,做同样的事情,非常简洁,但安全性稍差。
【解决方案3】:

类似的东西

#include <iostream>

int main(void) {

    char e = '0';

    std::cout << e - '\0' << std::endl;
    std::cout << sizeof(e) << std::endl;

    std::cin.get();
    std::cin.get();

    return 0;
}

尝试使用char e 等于任何字符,它将打印字符的实际值。感谢chris 提出另一种方法;这是通过将字符转换为int

std::cout << static_cast<int>(e) << std::endl;

【讨论】:

  • 我宁愿看到演员阵容,也不愿看到 0 tbh 的减法。
  • @chris,在这种情况下,“零”不是“空字符”吗?
  • 是的,但在我看来,它不如static_cast&lt;int&gt;(e) 清晰。如果越短越好,我们最终会使用 APL 或 Perl 或其他任何东西。
  • @Jake2k13:是的。但是标准中有一组特殊的规则(通常称为整数提升),其中一个效果是,本质上,如果您在两个操作数之间执行数学运算,这两个操作数都是小于int 的整数类型,他们被提升为int,操作的结果是int
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-02
  • 1970-01-01
  • 1970-01-01
  • 2011-10-03
  • 1970-01-01
相关资源
最近更新 更多