当前位置:  开发笔记 > 开发工具 > 正文

将字符数字转换为C中的相应整数

如何解决《将字符数字转换为C中的相应整数》经验,为你挑选了5个好方法。

有没有办法将字符转换为C中的整数?

例如,从'5'5到?



1> Chris Young..:

根据其他回复,这很好:

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值是连续的,但不保证其他字符如字母表的字母.


@Paul Tomblin:对于数字而不是字母是的,因为正如我在答案中所说的那样,标准保证'0'到'9'是连续的,但不保证其他字符如'a'到'z'.

2> Johannes Sch..:

像这样减去'0':

int i = c - '0';

C标准保证该范围内的每个数字'0'..'9'都比其前一个数字(在C99草案的部分5.2.1/3中)大一个数字.C++也是如此.



3> Chris Lutz..:

如果,通过一些疯狂的巧合,你想要将一串字符转换为整数,你也可以这样做!

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()(但是谁关心它).


atoi的问题在于它使用0作为"在这里找不到数字"值,因此atoi("0")和atoi("one")都返回0.如果这不适用于你的'重新使用它,寻找strtol()或sscanf().

4> Kevin Conner..:
char numeralChar = '4';
int numeral = (int) (numeralChar - '0');



5> Arif..:

像这样减去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

推荐阅读
帆侮听我悄悄说星星
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有