0

我正在尝试将十六进制数转换为十进制数。到目前为止,我想出的是:

#include <unistd.h>
#include <stdio.h>

long convert(char *input, short int *status){
    int length = 0;
    while(input[length])
    {
        length++;
    } 
    if(length = 0)
    {
        *status = 0;
        return 0;
    }
    else
    {
        int index;
        int converter;
        int result = 0;
        int lastNumber = length-1;
        int currentNumber;
        for(index = 0; index < length; index++){
            if(index == 0)
            {
                converter = 1;
            }

            else if(index == 1)
            {
                converter = 16;
            }

            else{
                converter *= 16;
            }
            if(input[lastNumber] < 45 || input[lastNumber] > 57)
            {
                *status = 0;
                return 0;
            }
            else if(input[lastNumber] > 45 && input[lastNumber] < 48)
            {
                *status = 0;
                return 0;
            }

            else{
                if(input[lastNumber] == 45)
                {
                    *status = -1;
                    return result *= -1;
                }
                currentNumber = input[lastNumber] - 48;
                result += currentNumber * converter;
                lastNumber--;
            }
        }
        *status = -1;
        return result;
    }
}

int main(int argc, char **argv)
{
    char *input=0;
    short int status=0;
    long rezult=0;
    if(argc!=2)
    {
        status=0;
    }
    else
    {
        input=argv[1];
        rezult=convert(input,&status);
    }

    printf("result: %ld\n", rezult);
    printf("status: %d\n", status);


    return 0;
}

不知何故,我总是得到结果 0。我也不允许使用任何其他外部函数(printf 除外)。我上面的代码可能有什么问题?

4

1 回答 1

2

这个:

if(dolzina = 0)
{
    *status = 0;
    return 0;
}

不仅仅是 testing dolzina,它首先将其设置为 0。这会导致else子句运行,但dolzina等于 0 这不是预期的结果。

当然,您应该只用于==比较。

于 2013-03-28T08:38:57.647 回答