将字符数字转换为C中相应的整数

有没有办法将字符转换为C中的整数?

例如,从'5'到5?

根据其他答复,这是很好的:

 char c = '5'; int x = c - '0'; 

另外,对于错误检查,你可能希望首先检查isdigit(c)是否为真。 请注意,你不能完全可移植地做相同的信件,例如:

 char c = 'b'; int x = c - 'a'; // x is now not necessarily 1 

该标准保证数字“0”到“9”的字符值是连续的,但不保证其他字符如字母表的字母。

减去这样的'0':

 int i = c - '0'; 

C标准保证每个数字在'0'..'9'的范围内'0'..'9'比前一个数字大( C99草案的 5.2.1/3节)。 对于C ++来说同样重要。

如果通过一些疯狂的巧合,你想把一串字符转换为一个整数,你也可以这样做!

 char *num = "1024"; int val = atoi(num); // atoi = ASCII TO Int 

val现在是1024.显然atoi()是好的,我刚才说的只适用于我(在OS X上(也许(插入Lisp笑话这里)))。 我听说这是一个大致映射到下一个示例的macros,它使用更通用的函数strtol()来进行转换:

 char *num = "1024"; int val = (int)strtol(num, (char **)NULL, 10); // strtol = STRing TO Long 

strtol()工作原理是这样的:

 long strtol(const char *str, char **endptr, int base); 

它把*str转换成一个long ,把它看作是一个基数。 如果**endptr不为空,它将保留find的第一个非数字字符strtol() (但是谁在乎)。

 char numeralChar = '4'; int numeral = (int) (numeralChar - '0'); 

减去字符'0'或int 48像这样:

 char c = '5'; int i = c - '0'; 

要么

 char c = '5'; int i = c - 48; // Because decimal value of char '0' is 48 
 char chVal = '5'; char chIndex; if ((chVal >= '0') && (chVal <= '9')) { chIndex = chVal - '0'; } else if ((chVal >= 'a') && (chVal <= 'z')) { chIndex = chVal - 'a'; } else if ((chVal >= 'A') && (chVal <= 'Z')) { chIndex = chVal - 'A'; } else { chIndex = -1; // Error value !!! } 

当我需要做这样的事情,我prebake与我想要的值的数组。

 const static int lookup[256] = { -1, ..., 0,1,2,3,4,5,6,7,8,9, .... }; 

那么转换很简单

 int digit_to_int( unsigned char c ) { return lookup[ static_cast<int>(c) ]; } 

这基本上是ctype库的许多实现采取的方法。 你可以微不足道地适应这个工作与hex数字了。

检查这个,

 char s='A'; int i = (s<='9')?(s-'0'):(s<='F')?((s-'A')+10):((s-'a')+10); 

只有0,1,2,…,E,F。

只需使用atol()函数即可:

 #include <stdio.h> #include <stdlib.h> int main() { const char *c = "5"; int d = atol(c); printf("%d\n", d); } 

如果它只是ASCII中的单个字符0-9,那么从ASCII值中减去ASCII零值字符的值应该可以正常工作。

如果你想转换更大的数字,那么以下将做到:

 char *string = "24"; int value; int assigned = sscanf(string, "%d", &value); 

**不要忘记检查状态(如果在上述情况下工作,应该是1)。

保罗。

使用函数:atoi为数组到整数,atof为数组到浮点型; 要么

 char c = '5'; int b = c - 48; printf("%d", b); 

你可以将它转换为int(或者float或者double或者你想要做的其他事情)并将其存储在anotervariables中。