在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
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