[英]C - Convert char to int
我知道要将任何给定的char转换为int,此代码是可能的[除了atoi()之外:
int i = '2' - '0';
但我从来不了解它是如何工作的,“ 0”的含义是什么,我似乎也没有在网上找到任何有关它的解释。
提前致谢!!
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
。
关于int
和char
请注意, '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.