将多位数字符转换为整数的最简单方法

时间:2017-11-08 05:38:20

标签: c char integer

假设这里是C中未知数字编号的字符:

char char_id[1000] = {'1', '2', '3', ..., '8', '9', '\0'};

如果我想要最后两位数字形成一个整数,即'89'。

最简单的方法是什么?

6 个答案:

答案 0 :(得分:2)

我假设您想要获取最后两个(非NUL)字符并将它们转换为int变量。可以通过多种方式完成:

这是一种方式:

int main(void) {
    int n;
    char char_id[1000] = {'1', '2', '3', '8', '9', '\0'};
    size_t len = strlen(char_id);
    if (len >= 2)
    {
        n = atoi(&char_id[len-2]);
        printf("%d\n", n);
    }
    else
    {
        printf("string too short\n");
    }
    return 0;
}

输出:

89

另一种转换可能是:

n = strtol(&char_id[len-2], NULL, 10);

答案 1 :(得分:2)

可能是这个

char char_id[1000] = {'1', '2', '3', /*..., */ '8', '9', '\0'};
int what_i_want    = atoi( char_id + ( strlen(char_id) - 2 ) );
顺便说一句,这些点有些垃圾,请评论

答案 2 :(得分:0)

  • 您只需使用atoi功能即可。 size_t pos = strlen(char_id);

int num = atoi(&char_id[pos-2]);

或者只是

int num = (char_id[pos-2]-'0')*10+(char_id[pos-1]-'0');

第一个解决方案使用ASCII编码 - 这使得该解决方案无法在不同平台上进行处理。

  • 使用null字符。 \0

  • 如果是数字,那么您可以轻松地在此处显示第二种方式。

答案 3 :(得分:0)

您将整个号码存储为char_id中的字符串。

您需要首先获取您想要数字的字符串的开头。

由于你想要最后两位数字,一个简单的方法是 -

char *sub_string = char_id + (strlen(char_id) - 2);

这假设最后有\0。如果你没有,但知道整个数组已经填满,你可以使用sizeof(char_id)

现在您需要一种可靠的方法来提取存储的整数。 我建议使用sscanf

int number;
if(sscanf(sub_string, "%d", &number) != 1) {
     printf ("Invalid number in string");
     // Exit?
}
printf("Number scanned = %d\n", number);

答案 4 :(得分:0)

这是将字符串转换为int的简单函数。

int str2int(char *numStr)
{
    int intVal=0 ;

    while(*numStr != '\0')
    {
        intVal *= 10;
        intVal  += *numStr - '0'; //0x30 ascii value of charater 0
        numStr++;
    } 
    return intVal;
}

要转换最后2位数字,您可以传递该数字的地址,例如& char_id [5]

答案 5 :(得分:0)

我实现了此功能。

int char_to_int(char *ptr, int length)
{
    int sum = 0;
    while(length--)
    {
        sum += (pow(10, length) * ((*ptr++) - 48));
    }
    return sum;
}

您应该那样使用

...
int number = char_to_int((char_id + 7), 2);
...