【问题标题】:Why '1' and (char)1 are not equal when compared in c++?为什么在 C++ 中比较 '1' 和 (char)1 不相等?
【发布时间】:2014-12-21 09:48:42
【问题描述】:

我的主要目标是将 int 转换为 char 类型。我使用(char)1 进行类型转换,但由于以下结果,它似乎不起作用:

当我在以下代码中比较 '1'(char)1 在 c++ 中时

if ('1' == (char)1)
{
    return 1;
}

但是,由于变量类型不同,比较似乎无效,或者它们实际上不是同一件事。我一直认为将整数1 转换为字符是(char)1。谁能告诉我如何将整数1 转换为字符'1'

【问题讨论】:

    标签: casting char


    【解决方案1】:

    '1' == 可打印 1 的字符 CODE 值,传统上是 ASCII 值,但现在是使用任何字符集中的代码点值。

    老技巧是 (ch - '0') 获取数值。

    根据语言,您应该对完整字符串使用转换函数。

    C++ - stoistolstrolstringstream

    C - atoiatol(这些也适用于 C++)

    【讨论】:

    • ch - '0' 在所有支持 C++ 的字符集中都有效
    • @MattMcNabb 对,我应该从第二句中删除 ASCII。当我第一次查看标签时,它没有说 C++,所以我没有做出任何假设是什么语言,尽管我想不出任何其他语言会有所不同。
    【解决方案2】:

    因为当你用 X 做 (char)X 一个数字时,你只是将 X 转换为一个字符的范围,或者 -128 to 127 or 0 to 255(就像一个模数)。

    例如,(char)300 给出 44(因为 300 % 256 = 44),(char)1 给出 1。正如在其他 cmets 中所说,1 是 SOH(标题开头)的 ASCII 等价物,而不是字符 '1'。

    【讨论】:

    • 我能解释一下否决票吗?其他 cmets 都没有解释 (char)1 实际返回的内容。
    【解决方案3】:

    正如 ibiza 所说,char(49) 实际上就是 1。这是因为 char 来自 ASCII 库。

    【讨论】:

    • "这是因为 char 来自 ASCII 库。"不。ASCII 不是必需的,尽管大多数实现都是如此。 (此外,ASCII 不是库。)
    【解决方案4】:

    因为 '1' 的 ASCII 等价物是 49,而不是 1。

    【讨论】:

      【解决方案5】:

      '1' 等于 (char)49 根据http://www.asciitable.com/

      (char)1 等于SOH (start of heading),这是一个不可打印的字符。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-07-23
        • 1970-01-01
        • 2013-08-22
        • 1970-01-01
        • 2011-04-07
        • 2021-10-08
        • 2011-01-16
        • 2018-03-05
        相关资源
        最近更新 更多