在C中将char转换为int

时间:2014-09-10 01:49:43

标签: c++ c char type-conversion

在发布这个问题之前,我已经搜索了很长时间了。答案应该相当容易,因为我是一个超初学者。

我有一个char*,我希望用户输入一些数字(超过20个),然后可以专门调用。

这是我尝试过的:

    char* digits = GetString();
    int prime = digits[0];

当我验证这是否适用于printf时,我发现素数已经变为0。

    printf("prime:%d\ndigits:%c\n",prime, digits[0]);

为什么会这样,我该怎么做才能使这项工作?

编辑:制作一个int数组并使用GetLongLong可能更容易吗?

2 个答案:

答案 0 :(得分:5)

C或C ++都不保证将使用什么值来对字符0进行编码,但两者都保证数字是连续的和有序的,因此(例如)digits[0]-48可能有效,也可能无效,但是digits[0] - '0'保证可以正常工作(假设digits[0]实际上只有一个数字。)

C ++标准(§2.3/ 3)中的精确要求是:

  

在源和执行基本字符集中,每个字符的值在0之后   上面的十进制数字列表应大于前一个值。

至少从C99开始,C标准的措辞相同,但§5.2.1/ 3。

答案 1 :(得分:2)

字符零(' 0')的数值为48,' 1'是49,依此类推。

您可能会发现这是一个有用的习惯用法,可以从ascii值中获取数值。

int prime = digits[0] - '0';

你也可以找到 man ascii 信息(或类似的手册页,如果你使用其他字符集)