题
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'的char值是连续的,但不保证其他字符如字母表的字母。
其他提示
如果,由于某种疯狂的巧合,你想转换一个 细绳 将字符转换为整数,您也可以这样做!
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()
发现了(但谁在乎这个)。
像这样减去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 ,它将自动转换整数。
char numeralChar = '4';
int numeral = (int) (numeralChar - '0');
将字符数字转换为相应的整数。如下所示:
char c = '8';
int i = c - '0';
上面计算的逻辑是使用ASCII值。字符8的ASCII值为56,字符0的ASCII值为48.整数8的ASCII值为8.
如果我们减去两个字符,则字符ASCII之间会发生减法。
int i = 56 - 48;
i = 8;
如果它只是ASCII中的单个字符0-9,那么从ASCII值中减去ASCII零字符的值应该可以正常工作。
如果您想转换较大的数字,则以下内容将执行:
char *string = "24";
int value;
int assigned = sscanf(string, "%d", &value);
**不要忘记检查状态(如果在上述情况下有效,则应为1)。
保罗。
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 !!!
}
当我需要做这样的事情时,我会预先设置一个包含我想要的值的数组。
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库的许多实现所采用的方法。 您可以轻松地调整它以使用十六进制数字。
检查一下,
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);
}
如果您的数字是'5'
,则在ASCII中它表示为二进制数 0011 0101
(53)。每个数字具有最高的四位 0011
,最低的4位表示bcd中的数字。所以你就这样做了
char cdig = '5';
int dig = cdig & 0xf; // dig contains the number 5
得到最低的4位,或者相同的数字。在asm中,它使用和
操作而不是 sub
(如在其他答案中那样)。
使用函数:atoi表示数组为整数,atof表示数组为float类型; 或
char c = '5';
int b = c - 48;
printf("%d", b);
您可以将它转换为int(或浮点数或双精度或其他任何你想用它做的事)并将其存储在anoter变量中。