繁体   English   中英

C-将char转换为int

[英]C - Convert char to int

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

int i = '2' - '0';

但我从来不了解它是如何工作的,“ 0”的含义是什么,我似乎也没有在网上找到任何有关它的解释。

提前致谢!!

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

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

请参阅ASCII表以获得更好的图像。

编辑:感谢@ouah的更正。

C中的所有字符都用整数值表示,即字符的ASCII码。 例如,“ 0”对应于48,而“ 2”对应于50,因此'2'-'0'使您50-48 = 2

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

当使用逗号' '您将数字视为一个字符,并且如果将其提供给int,则int将采用此字符的ASCII代码的值。

用单引号引起来的任何字符文字都对应于代表该字符的ASCII码的数字。 实际上,此类文字不算作char ,而是int ,因此它们可以与其他数字文字完全互换。

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

看一下ASCII表。

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

这导致

0x32 - 0x30 = 2

都是关于相应字符的ASCII码

在C语言中,所有数字(0至9)都按ASCII值48至57顺序编码。 因此, '0'实际上得到值48,而'2'具有值50。因此,当您写int i = '2' - '0'; ,实际上是从50中减去48,得到2。

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

因此,这里的顺序表示'2'值为'0' + 2

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

这两个术语在内部均由数字的ASCII码表示,并且数字具有连续的ASCII码,将它们相减可得出两个数字之间的差。

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

'a' - 32 = 'A'

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

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

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

这意味着'2' - '0'被转换为50 - 48 因此,您也可以用相同的方式找出两个字母的数字距离,例如'z' - 'a'等于122 - 97等于25

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM