有没有办法将字符转换为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值是连续的,但不保证其他字符如字母表的字母.
像这样减去'0':
int i = c - '0';
C标准保证该范围内的每个数字'0'..'9'
都比其前一个数字(在C99草案的部分5.2.1/3
中)大一个数字.C++也是如此.
如果,通过一些疯狂的巧合,你想要将一串字符转换为整数,你也可以这样做!
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
为a long
,将其视为基数base
.如果**endptr
不为null,则保存找到的第一个非数字字符strtol()
(但是谁关心它).
char numeralChar = '4'; int numeral = (int) (numeralChar - '0');
像这样减去char'0'或int 48:
char c = '5'; int i = c - '0';
要么
char c = '5'; int i = c - 48; // Because decimal value of char '0' is 48