2013-02-13 40 views

回答

0

zero的ascii值从char中减去,所以在数字的情况下,该位置的数字值将被返回。

+0

它不一定是ASCII。虽然'0'到'9'总是连续的。 – Pubby 2013-02-13 05:55:27

+1

什么,你认为有人使用atoi()来对付EBCDIC? :) – 2013-02-13 05:58:32

+0

我需要阅读两次你的评论,我认为你是正确的位置n IBM编码应该是平等的。但是ASCII更常见不是吗?关于Unicode,这取决于一些暗示。 – rekire 2013-02-13 05:58:59

3

它将ASCII字符'0'到'9'分别转换为整数值0到9。 (显然,如果你确定*str实际上是字符'0'到'9'中的一个,这只是一个好主意。)

+0

所以如果我的char * str是“string”的话。数字的第一个值是什么? – 2013-02-13 06:03:15

+1

这是atoi()的无效使用。垃圾进垃圾出。 atoi()的Linux手册页说“atoi()不检测错误”。 但是,对您的问题的严格回答是:数字的第一个值将是对应于's'的整数值,减去对应于'0'的整数值。 – 2013-02-13 06:05:36

+0

@ RyanV.Bissell不要读“人”,这是不好的,充满了错误。 C11 7.22.1.2表示atoi相当于'(int)strtol(nptr,(char **)NULL,10)'。 C11 7.22.1.4/8'strtol ...“/ - /”...函数返回转换后的值(如果有的话)。如果不能执行转换,则返回零。' – Lundin 2013-02-13 07:45:32

1

* str可能指向字符值从'0' - '9',然而,如果用* str来使用简单的算术,那么可能无法按预期工作。如果* str指向字符'4'并且我们执行'4'+ 2,结果实际上是54,因为'4'的ASCII值是52.所以通过从* str减去'0',我们将ASCII值转换为数字。 “4” - “0” + 2 = 6

http://www.asciitable.com/

1

该字符值*str转换成一个整数,通过从当前字符中减去数字'0'的编码值。整数值将在0到9的范围内。

这可以工作,因为C保证数字0到9总是使用相邻值进行编码(即编码值'1'保证与'0' + 1完全一致,并且等等)。

许多人似乎认为这“利用”了ASCII的某些事实,但无论系统的本机编码如何,这都必须适用于C运行的任何平台。