我已经看到了这方面的例子:
int i = 2;
char c = i + '0';
string s;
s += char(i + '0');
但是,我还没有看到为什么添加零允许转换的原因。
答案 0 :(得分:9)
如果查看ASCII表asciitable,您会看到数字从48开始(为'0')并且最多为57(对于'9')。因此,为了获得数字的字符代码,您可以将该数字添加到字符代码“0”。
答案 1 :(得分:3)
使用ASCII编码时,'0'
的整数值为48
。
'0' + 1 = 49 = '1'
'0' + 2 = 50 = '2'
...
'0' + 9 = 57 = '9'
因此,如果您想将数字转换为相应的字符,只需添加'0'
即可。
即使platfrom使用非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
因此,无论平台使用的字符编码如何,行
int i = 2;
char c = i + '0';
将始终导致c
的值等于字符'2'
。
答案 2 :(得分:2)
C ++标准在其[lex.charset]部分中指出:“上述十进制数字列表中的每个0后面的字符的值应比前一个的值大一个”(引自N4659草案)。 / p>
因此,'1'
的值为'0'+1
,而'2'
的值比'0'+2
多一个,依此类推。如果n
的值从0到9,则'0'+n
是从'0'
到'9'
的对应字符的值。
(与以前的答案不同,该答案不采用ASCII,而是显示该属性如何从C ++标准派生。)
答案 3 :(得分:1)
它基于ASCII值。将ASCII值0添加为48意味着48 + 5将为53或ASCII 53为5。
谷歌ASCII并找到一个好的图表并研究它。一旦你查看每个char(字符)的值,它就应该有意义。
答案 4 :(得分:0)
(char)(i+c)
其中c
为char
,为您提供一个新的char
,其ascii值等于(c
的ascii值)+ {{1 }}。由于数字0-9的ascii值是连续的,i
会为您提供与i+'0'
对应的字符,只要i
位于适当的范围内。
编辑:i
是一个int,正如Jarod42指出的那样。添加了强制转换以保持正确性。
答案 5 :(得分:-1)
char将根据ASCII值将整数转换为相应的值,因此,如果为char分配一个值48,则它将存储0,因为48是ASCII值0.相应地,将ASCII值添加为0到您需要转换为char的任何整数