我使用下面的函数将十六进制转换为十进制,但它不能打印正确的结果。 谁能帮我这个?? 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);
}
}
答案 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/double
和int
,但这与十六进制或十进制表示无关。
如果您想进行某些计算,例如23/100,并希望得到0.23,那么您必须使用float
或double
个变量。在您的示例中,您使用char
,如果无符号,则只能表示0-255之间的自然数,如果签名则表示-127到128之间的自然数。