如何在c++;要获得正确的数字值? < >我想把C++中的代码> char < /> >转换为 int >代码,我使用了 char A1,并转换(int)A1,但是我得到了错误的值,例如: 如果a1是'1',则49 如果a1是'2',则50 等 为什么会这样?如何解决此问题?

如何在c++;要获得正确的数字值? < >我想把C++中的代码> char < /> >转换为 int >代码,我使用了 char A1,并转换(int)A1,但是我得到了错误的值,例如: 如果a1是'1',则49 如果a1是'2',则50 等 为什么会这样?如何解决此问题?,c++,char,int,C++,Char,Int,发生这种情况是因为char值通常以ASCII编码。这意味着,例如,'1'由数值49表示。要进行字母顺序转换(即将'1'转换为1),请查看,或者,如果您使用的是c样式字符串,请查看。这是因为(int)a只转换类型,而不转换值。字面上,它对编译器说“将a的值视为int值”,在“1”的情况下,该值返回其ASCII码49。 要转换实际值,可以使用: // num == 49 - 48; int num = (int)a - (int)'0'; 要获得实际值,请减去初始值 像 或者您可以键入cast以

发生这种情况是因为
char
值通常以ASCII编码。这意味着,例如,
'1'
由数值49表示。要进行字母顺序转换(即将
'1'
转换为
1
),请查看,或者,如果您使用的是c样式字符串,请查看。

这是因为
(int)a
只转换类型,而不转换值。字面上,它对编译器说“将
a
的值视为
int
值”,在“1”的情况下,该值返回其ASCII码49。 要转换实际值,可以使用:

// num == 49 - 48; 
int num = (int)a - (int)'0';

要获得实际值,请减去初始值 像

或者您可以键入cast以获得准确的值

希望你能明白

intatoi(const char*str)
此函数在这方面很有帮助。请参阅此处的文档

没有问题。根据ASCII标准,字符
'1'
等于49。请参阅unicode表。在显示49的地方查找,您将看到它对应于字符
'1'
。类似地,字符
'a'
等于97,字符
'a'
等于65,依此类推。好的,那么如何从'1'1整数中得到?减去字符
'0'
'1'
-
'0'
=49-48=1。适用于从
'0'
'9'
的所有字符。请发布@AnthonyD。我建议不要在代码中使用魔法常量<代码>'1'-'0'同样适用,但可读性更强;C和C++都要求数字<代码> 0 '/COD>通过<代码> '9' <代码>的字符表示是连续的和增加的。第二个不能保证有效,还有一些字符集(我在看你,EBCDIC)不起作用。哦,我不知道“EBCDIC”,谢谢你提供的信息。但在一般情况下,它的工作导致0-9、a-z、a-z在ASCII编码中是连续的
char x='1'; //ascii value=49
int xx=x-'0' //49-48==1

char a='C'; //67
char aa=a-'A' //67-65=2 means third char of Alphabet