有没有办法将字符转换为C中的整数?
例如,从'5'
到5?
答案 0 :(得分:111)
根据其他回复,这很好:
char c = '5';
int x = c - '0';
另外,对于错误检查,您可能希望首先检查isdigit(c)是否为真。请注意,对于字母,您无法完全相同地执行相同的操作,例如:
char c = 'b';
int x = c - 'a'; // x is now not necessarily 1
标准保证数字'0'到'9'的char值是连续的,但不保证其他字符如字母表的字母。
答案 1 :(得分:36)
答案 2 :(得分:24)
如果,由于某种疯狂的巧合,您想将字符串字符转换为整数,那么您也可以这样做!
char *num = "1024";
int val = atoi(num); // atoi = ASCII TO Int
val
现在是1024.显然atoi()
很好,之前我所说的只适用于我(在OS X上(也许(在这里插入Lisp笑话)))。我听说它是一个粗略映射到下一个示例的宏,它使用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
,将其视为基数base
。如果**endptr
不为空,则它会保留找到的第一个非数字字符strtol()
(但是谁会关心它)。
答案 3 :(得分:6)
减去char' 0'或者像这样的int 48:
char c = '5';
int i = c - '0';
说明:在内部,它与ASCII值一起使用。从ASCII表中,字符 5的十进制值为53 , 0为48 。所以 53 - 48 = 5
OR
char c = '5';
int i = c - 48; // Because decimal value of char '0' is 48
这意味着如果您从任何数字字符中扣除 48 ,它将自动转换整数。
答案 4 :(得分:5)
char numeralChar = '4';
int numeral = (int) (numeralChar - '0');
答案 5 :(得分:3)
将字符数字转换为相应的整数。如下所示:
char c = '8';
int i = c - '0';
上面计算的逻辑是使用ASCII值。字符8的ASCII值为56,字符0的ASCII值为48.整数8的ASCII值为8.
如果我们减去两个字符,则字符ASCII之间会发生减法。
int i = 56 - 48;
i = 8;
答案 6 :(得分:0)
如果它只是ASCII中的单个字符0-9,那么从ASCII值中减去ASCII零字符的值应该可以正常工作。
如果您想转换较大的数字,则以下内容将执行:
char *string = "24";
int value;
int assigned = sscanf(string, "%d", &value);
**不要忘记检查状态(如果在上述情况下有效,则应为1)。
保罗。
答案 7 :(得分:0)
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 !!!
}
答案 8 :(得分:0)
当我需要做这样的事情时,我会预先设置一个包含我想要的值的数组。
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库的许多实现所采用的方法。 您可以轻松地调整它以使用十六进制数字。
答案 9 :(得分:0)
检查一下,
char s='A';
int i = (s<='9')?(s-'0'):(s<='F')?((s-'A')+10):((s-'a')+10);
仅适用于0,1,2,....,E,F。
答案 10 :(得分:0)
只需使用atol()
功能:
#include <stdio.h>
#include <stdlib.h>
int main()
{
const char *c = "5";
int d = atol(c);
printf("%d\n", d);
}
答案 11 :(得分:0)
如果您的数字是'5'
,则以ASCII表示为二进制数0011 0101
(53)。每个数字都有最高的四位0011
,而最低的四位代表bcd中的数字。所以你就做
char cdig = '5';
int dig = cdig & 0xf; // dig contains the number 5
以获得最低的4位或相同的位数。在asm中,它使用and
运算符代替sub
(与其他答案一样)。
答案 12 :(得分:0)
这里有一些辅助函数,可以将char中的数字转换为int,反之亦然:
int toInt(char c) {
return c - '0';
}
char toChar(int i) {
return i + '0';
}
答案 13 :(得分:-2)
使用函数:atoi表示数组为整数,atof表示数组为float类型; 或
char c = '5';
int b = c - 48;
printf("%d", b);
答案 14 :(得分:-3)
您可以将它转换为int(或浮点数或双精度或其他任何你想用它做的事)并将其存储在anoter变量中。