在C语言中,有一种方法可以将字符转换为整数。
例如,从'5'
到5?
根据其他回复,这是可以的:
char c = '5';
int x = c - '0';
另外,为了进行错误检查,您可能希望首先检查isdigit(c)返回true。请注意,对于字母,您无法完全可移植地执行相同的操作,例如:
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()
找到的第一个非数字字符(但是谁在乎呢)。
itoa_s()
。 - Xantium将字符数字转换为相应的整数。请按照以下步骤执行:
char c = '8';
int i = c - '0';
以上计算背后的逻辑是玩弄 ASCII 值。字符 8 的 ASCII 值为 56,字符 0 的 ASCII 值为 48。整数 8 的 ASCII 值为 8。
如果我们减去两个字符,减法将在字符的 ASCII 值之间进行。
int i = 56 - 48;
i = 8;
像这样减去字符 '0' 或整数 48 :
char c = '5';
int i = c - '0';
说明:它在内部使用ASCII值进行计算。 根据ASCII表,字符5的十进制值为53,而0的十进制值为48。 因此,53-48 = 5
或者
char c = '5';
int i = c - 48; // Because decimal value of char '0' is 48
这意味着,如果您从任何数字字符中减去48,它将自动转换为整数。
char numeralChar = '4';
int numeral = (int) (numeralChar - '0');
numeralChar - '0'
已经是 int
类型,因此您不需要进行强制转换。即使它不是,也不需要进行强制转换。 - Alok Singhal以下是几个辅助函数,可以将字符中的数字转换为整数,也可以将整数转换为字符:
Original Answer翻译成"最初的回答"
int toInt(char c) {
return c - '0';
}
char toChar(int i) {
return i + '0';
}
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个比特位,或者说,就是数字。在汇编语言中,它使用and
操作而不是sub
(如其他回答中所示)。
00110101
) - eyllanesc请检查此内容,
char s='A';
int i = (s<='9')?(s-'0'):(s<='F')?((s-'A')+10):((s-'a')+10);
对于仅为0、1、2、....、E、F的情况。