c函数将十六进制转换为十进制表示

时间:2014-01-07 08:49:26

标签: c hex

我使用下面的函数将十六进制转换为十进制,但它不能打印正确的结果。 谁能帮我这个?? Thanku ..

#include<stdio.h>
#include<stdlib.h>
long hextoint(char hex)
{
printf("%x\n",hex);
long hexa=0;
int byte;
for(byte=0;byte<8;byte++)
{
    if(hex & (0x0001<<byte)) 
    {
        hexa+=1*(2^byte);
    }

    else
    {       
        hexa+=(0*(2^byte));
    }
}

return hexa;
}
int  main()
{
char content[]={0x1F,0xF2,0x24};
int i;
for(i=0;i<3;i++)
{
    long dec=hextoint(content[i]);
    printf("%ld\n",dec);
}
}

3 个答案:

答案 0 :(得分:4)

您遇到的问题是您错误地表达了值和值的存储。计算机中的所有值都以二进制格式存储。但是你如何呈现它可以用不同的方式完成(十六进制,十进制,八进制等)。

数组content中的值仅在编辑器中为十六进制。一旦编译并存储在内存中,它就是二进制文件。所以你不需要任何特殊的函数来转换值,只需用十进制打印它们:

printf("%u\n", content[i]);

答案 1 :(得分:1)

您不需要此功能

您可以将所有char数组元素直接打印为十进制:

for(i=0;i<3;i++)
{
    printf("%ld\n",content[i]);
}

答案 2 :(得分:1)

char值只是存储为计算机中二进制文件的数值。如果你想将它转换为十六进制或十进制,它只是一个相同值的表示,那么函数hextoint实际上没有意义,只有输出它才有意义。

你可能的意思是输出一个十进制或十六进制的字符串,为此你可以像在示例代码中那样使用printf族函数。

<强>更新

阅读您的评论,您的真正问题似乎是float/doubleint,但这与十六进制或十进制表示无关。

如果您想进行某些计算,例如23/100,并希望得到0.23,那么您必须使用floatdouble个变量。在您的示例中,您使用char,如果无符号,则只能表示0-255之间的自然数,如果签名则表示-127到128之间的自然数。