我在各处都看到了这方面的例子:
int i = 2;
char c = i + '0';
string s;
s += char(i + '0');
然而,我还没有看到为什么添加零可以进行转换的解释。
我在各处都看到了这方面的例子:
int i = 2;
char c = i + '0';
string s;
s += char(i + '0');
然而,我还没有看到为什么添加零可以进行转换的解释。
0
是可行的,因为C++标准要求'0'
到'9'
的字符代码是连续的,在[lex.charset]章节中有说明。 - Eric Postpischil'0'
的整数值为48
。'0' + 1 = 49 = '1'
'0' + 2 = 50 = '2'
...
'0' + 9 = 57 = '9'
因此,如果您想将数字转换为相应的字符,只需将'0'
添加到数字上。
即使平台使用非ASCII编码,语言仍保证字符'0'
- '9'
必须被编码为:
'1' - '0' = 1
'2' - '0' = 2
'3' - '0' = 3
'4' - '0' = 4
'5' - '0' = 5
'6' - '0' = 6
'7' - '0' = 7
'8' - '0' = 8
'9' - '0' = 9
'1' - '0' = 49 - 48 = 1
'2' - '0' = 50 - 48 = 2
'3' - '0' = 51 - 48 = 3
'4' - '0' = 52 - 48 = 4
'5' - '0' = 53 - 48 = 5
'6' - '0' = 54 - 48 = 6
'7' - '0' = 55 - 48 = 7
'8' - '0' = 56 - 48 = 8
'9' - '0' = 57 - 48 = 9
int i = 2;
char c = i + '0';
这将始终导致c
的值等于字符'2'
。
'1'
的值为'0'+1
,'2'
的值比它大1,即'0'+2
',以此类推。如果n
的值在0到9之间,则'0'+n
是从'0'
到'9'
对应字符的值。这是基于ASCII值的。将ASCII值为0的数字加上48,意味着48 + 5将变成53或者ASCII 53,即数字5。
你可以谷歌ASCII并找到一个好的图表来学习。一旦你查看每个字符(char)的数值,它应该就很容易明白了。
(char)(i+c)
其中 c
是一个 char
,可以给你一个新的 char
,其 ASCII 值等于 c
的 ASCII 值加上 i
。由于数字 0-9 的 ASCII 值是连续的,只要 i
在适当的范围内,i+'0'
就可以给你对应于 i
的字符。
编辑:如 Jarod42 指出的那样,(i+c)
是一个 int。为了保持正确性,添加了一个强制转换。
一个字符将根据ASCII值将整数转换为相应的值,因此,如果您将48分配给字符,则它将存储0,因为48是0的ASCII值。同样,您可以将0的ASCII值添加到任何需要转换为字符的整数。
'0'
)。它不会存储0,因为0 != 48。 - John Coleman
char(i + '0');
在C++中是什么意思?(这是一个实际的问题。) - thisi
与'0'相加并提升为整数,将结果强制转换为使用函数风格的强制转换符char
,其所做的与C风格强制转换相同。 - chrisi∈[0, 9]
仍然有效,因为数字字符的字符代码保证是连续的。如果您想要一个不兼容ASCII的字符集示例,请查看EBCDIC。数字'0'
-'9'
的字符代码分别为240-249。 - chris