Convert a character digit to the corresponding integer in C
Is there a way to convert a character to an integer in C?
For example, from '5'
to 5?
Solution 1:
As per other replies, this is fine:
char c = '5';
int x = c - '0';
Also, for error checking, you may wish to check isdigit(c) is true first. Note that you cannot completely portably do the same for letters, for example:
char c = 'b';
int x = c - 'a'; // x is now not necessarily 1
The standard guarantees that the char values for the digits '0' to '9' are contiguous, but makes no guarantees for other characters like letters of the alphabet.
Solution 2:
Subtract '0' like this:
int i = c - '0';
The C Standard guarantees each digit in the range '0'..'9'
is one greater than its previous digit (in section 5.2.1/3
of the C99 draft). The same counts for C++.
Solution 3:
If, by some crazy coincidence, you want to convert a string of characters to an integer, you can do that too!
char *num = "1024";
int val = atoi(num); // atoi = ASCII TO Int
val
is now 1024. Apparently atoi()
is fine, and what I said about it earlier only applies to me (on OS X (maybe (insert Lisp joke here))). I have heard it is a macro that maps roughly to the next example, which uses strtol()
, a more general-purpose function, to do the conversion instead:
char *num = "1024";
int val = (int)strtol(num, (char **)NULL, 10); // strtol = STRing TO Long
strtol()
works like this:
long strtol(const char *str, char **endptr, int base);
It converts *str
to a long
, treating it as if it were a base base
number. If **endptr
isn't null, it holds the first non-digit character strtol()
found (but who cares about that).
Solution 4:
To convert character digit to corresponding integer. Do as shown below:
char c = '8';
int i = c - '0';
Logic behind the calculation above is to play with ASCII values. ASCII value of character 8 is 56, ASCII value of character 0 is 48. ASCII value of integer 8 is 8.
If we subtract two characters, subtraction will happen between ASCII of characters.
int i = 56 - 48;
i = 8;