将字符数字转换为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中。