C,无需函数即可将十六进制数转换为十进制数

时间:2013-03-28 08:36:45

标签: linux hex decimal converter

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

#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;
}

不知怎的,我总是得到resoult 0.我也不允许使用任何其他的外部功能(除了printf)。上面的代码有什么问题?

1 个答案:

答案 0 :(得分:2)

此:

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

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

当然,您应该使用==进行比较。