在C中将char转换为int

时间:2013-08-09 02:26:20

标签: c pointers casting char int

我想制作一个将3www2as3com0转换为www.as.com的程序,但我在开始时遇到了麻烦;我想将字符串的第一个数字(字符3)转换为整数以使用strncpystrchr等函数,因此当我打印转换的int时,程序显示51而不是3.问题是什么?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char** argv) {

    /* argv[1]--->3www2as3com0*/

    char *string;
    char *p;  

    string=argv[1];
    p=string;

    char cond,cond2;

    cond=*p; //I want to have in cond the number 3

    cond2=(int)cond; //I want to convert cond (a char) to cond2(an int)

    printf("%d",cond2); //It print me 51 instead of 3

    return (EXIT_SUCCESS);
}

3 个答案:

答案 0 :(得分:3)

您的计算机显然在名为ASCII的方案中对字符串进行编码。 (我相当确定大多数现代计算机使用ASCII或超集,例如UTF-8用于char*字符串。)

请注意可打印字符和非打印字符如何编码为数字。 51是字符'3'的编号。

ASCII的一个很好的功能是所有数字都有从'0'开始增加的代码。

这允许通过计算aDigitCharacter - '0'来获得数字的数值。

例如:cond2 = cond - '0';

编辑:

您还应该通过确保字符位于'0''9'之间来仔细检查字符是否确实是数字;

如果要将包含多个数字的字符串转换为可能需要使用atoi的数字。 它可以在<stdlib.h>中找到。

答案 1 :(得分:0)

字符的整数值是数字的ASCII代码,而不是它实际代表的数字。您可以通过减去'0'来转换。

if( c >= '0' && c <= '9' ) val = c - '0';

答案 2 :(得分:0)

看起来你正在使用的字符串永远不会有负数,所以你可以使用atoi(),从char返回整数值。如果它遇到不是数字的东西,它将获得在此之前建立的数字。