Answers:
根据其他答复,这很好:
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
不为null,它将保存找到的第一个非数字字符strtol()
(但谁在乎这一点)。
itoa_s()
。
char numeralChar = '4';
int numeral = (int) (numeralChar - '0');
numeralChar - '0'
已经是类型int
,因此您不需要强制转换。即使不是,也不需要强制转换。
当我需要做这样的事情时,我会用所需的值预烘烤一个数组。
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中的数字转换为int,反之亦然的帮助函数:
int toInt(char c) {
return c - '0';
}
char toChar(int i) {
return i + '0';
}
使用函数:atoi表示数组为整数,atof表示数组为浮点型;要么
char c = '5';
int b = c - 48;
printf("%d", b);