【问题标题】:C - Convert char to intC - 将 char 转换为 int
【发布时间】:2012-07-11 12:47:02
【问题描述】:

我知道要将任何给定的 char 转换为 int,此代码是可能的 [除了 atoi()]:

int i = '2' - '0';

但我一直不明白它是如何工作的,'0' 的含义是什么,我似乎在网上找不到任何解释。

提前致谢!!

【问题讨论】:

  • 感谢所有回复,非常有用的东西:)

标签: c type-conversion


【解决方案1】:

在 C 中,字符文字的类型为 int。 [Character Literals/IBM]

在您的示例中,'0' 的数值为 48,'2' 的数值为 50。当您执行 '2' - '0' 时,您将得到 50 - 48 = 2。这适用于 0 到 9 的 ASCII 数字。

请参阅ASCII table 以获得更好的图片。

编辑:感谢@ouah 的更正。

【讨论】:

  • 所以当我添加或减去任何 char 类型时,我正在操作它们的 ASCII 码??
  • @Alex,'2' 的数值是 50,而不是 58。
  • @engheema:是和不是。 a 等于 2 或等于 '2' 等于 50 之间存在细微差别。取决于您正在查看的 char 的“解释”。
  • '0'int 不是因为整数提升,而是因为字符文字的类型是 int
【解决方案2】:

C 中的所有字符都用一个整数值表示,即字符的 ASCII 码。 例如,'0' 对应 48,'2' 对应 50,所以 '2'-'0' 得到你 50-48 = 2

链接到 ASCII 表:http://www.robelle.com/smugbook/ascii.html

【讨论】:

    【解决方案3】:

    当您使用逗号 ' ' 时,您将数字视为一个字符,如果将其赋予一个 int,则 int 将采用该字符的 ASCII 码的值。

    【讨论】:

      【解决方案4】:

      用单引号括起来的任何字符文字都对应一个表示该字符的 ASCII 代码的数字。事实上,这些文字的计算结果不是char,而是int,因此它们可以与其他数字文字完全互换。

      在您的表达式中,'2' 可与50 互换,'0' 可与48 互换。

      【讨论】:

        【解决方案5】:

        查看 ASCII 表。

        '0' 表示为 0x30,'9' 表示为 0x32。

        这会导致

        0x32 - 0x30 = 2
        

        【讨论】:

          【解决方案6】:

          都是关于对应字符的ASCII codes

          在 C 中,所有数字(0 到 9)都以 ASCII 值 48 到 57 顺序编码。所以'0' 实际上得到的值是 48,'2' 的值是 50。所以当你写 int i = '2' - '0'; 时,你实际上是从 50 中减去 48,得到 2。

          【讨论】:

            【解决方案7】:

            '0''9' 保证在所有字符集中都是 C 中的顺序值。这不限于ASCII,C也不限于ASCII字符集。

            这里的顺序意味着'2'的值是'0' + 2

            关于intchar 请注意'0''9' 值在C 中属于int 类型,而不是char 类型。字符文字的类型为 int

            【讨论】:

              【解决方案8】:

              这两个术语在内部由数字的 ASCII 代码表示,并且由于数字具有连续的 ASCII 代码,减去它们可以得到两个数字之间的差异。

              您也可以对字符进行类似的操作,例如通过从小写字符中减去 32 将小写转换为大写

              'a' - 32 = 'A'
              

              【讨论】:

                【解决方案9】:

                这仅是因为 ASCII 按顺序为字符分配代码,即“2”的字符代码比“0”的字符代码大 2。

                在另一种编码中它不起作用。

                【讨论】:

                  【解决方案10】:

                  当您将 char 转换为 int 时,它实际上将每个字符映射到 ascii 表中的适当数字。

                  这意味着'2' - '0' 被翻译成50 - 48。 所以你也可以用同样的方法找出两个字母的数字距离,例如 'z' - 'a' 等于 122 - 97 等于 25

                  您可以在 thsi 表中查找每个 ASCII 字符的数字表示: http://www.asciitable.com/

                  实际上char 只是一个无符号字节:C 只是针对不同的操作区别对待它。例如printf(97) 产生97 作为输出,但printf((char)97) 会给你'a' 作为输出。

                  【讨论】:

                    猜你喜欢
                    • 2015-12-18
                    • 2015-01-29
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2014-02-07
                    相关资源
                    最近更新 更多