在C中将整数转换为字符串

Converting integer to string in C

int x =5;
char y = x + '0';

显然这段代码将整数转换为字符串。但我不明白它是如何在幕后运作的。我是新手。有人可以解释如何将字符串 0 与 int 相加将其转换为字符串吗?

char y = x + '0';

输入 '0' 的字符代码(ASCII 或您的系统实现的任何字符代码)并向其添加 5 然后再次将该整数转换为 ASCII(/UTF -8 或任何其他字符编码 ) 字符,这就是您的输出 (5) 的字符。

幕后发生的事情是这样的:

y = 5 + 48  ;for ASCII/UTF-8 character code of '0' is 48
y = 53

和 ASCII/UTF-8 53 的字符是 '5'

它不会将字符串转换为整数。它只是给你等效的字符。 我们可以将 int(0-127) 转换为 char,反之亦然,输出将是 ASCII/UTF-8 值。 char 在内存中存储为 short int。即它们是 8-bit int 个值。

你这里有点误会。变量 y 不是字符串,它是一个字符。字符串是一个字符数组。你在这里实际做的是:

char y = x + 48; //48 is the ASCII encoding of 0

这有点像:

char y = 50;
printf("%c\n", y); //prints 2 as a char

这是因为字符是用特定值编码的。例如。 'a'是97。'b'是98等等。同样'0'的代码是48.

 char y = x + '0'

的意思是将0(即48)的编码值加到x上。因为 0 是第一个号码,所以另一个号码的代码将紧挨着它。这就是我的意思:

48 -> This is 0
49 -> This is 1
50 -> This is 2
51 -> This is 3
52 -> This is 4
53... and so on

您可能会注意到为了获得例如。 1,我们需要给零加一。 48 + 1 = 49 而 49 是 1 的编码。这对所有数字都是如此。

注意:我使用 ASCII 编码进行解释,但还有其他编码,它应该适用于大多数奇怪的编码。

'0' 是一个整数,不是字符串。字符串文字有双引号(例如 "Hi!")。字符文字(整数)有单引号(例如 'A')。

x + '0' 计算结果为 int 因为两个操作数都是 int.

字符文字的整数值是其 ASCII 值:https://en.wikipedia.org/wiki/ASCII#Character_set
从asciitable,'0'的整数值为48.

现在,来到问题中的表达式:
x 为 5,'0' 为 48.
因此 y = 48+5(即 53)。

当您使用printf("%c", y)y 打印为字符时,将打印ASCII 值为53 的字符。即 '5'

为什么把一个数位整数加上'0'好像变成整数是因为'0'到'9'在ASCII table中是一个接一个的。这意味着 '9' (57) 恰好是 '0' (48) 之后的 9 个空格。

这就是为什么将两位数的整数加到“0”上不起作用的原因。例如。 '0' + 10 将是 ':'(ASCII 值 58)。

要将较大的字符串正确转换为整数,请使用 atoi 函数 (https://man7.org/linux/man-pages/man3/atoi.3.html)。 例如

int a = atoi("1023"); // a is an integer with the value 1023