急求十六进制转浮点数C程序!!!

ieee754标准规定了单精度的浮点数在计算机的内存中以4个字节(也就是8个十六进制数)的形式存储,其具体的标准什么的我都已经知道了,现在我需要一个C程序能够实现输入一个8位的16进制数,就能将其转化为对应的浮点数并输出!
我已经试了好多编法,都不行(如附图所示,编译器是用的turbo C++3.0),其中我觉得最靠谱的利用指针和强制类型转化的方法也不行,可能是我的水平太次了,真诚求助各位C语言高手,这是我毕业设计的一部分,如若能成功帮我解决这个问题,必有重谢!

楼主你好.
楼上的解决方式是很对的。
这个问题的解决需要这样的一个思想:将需要转换的数值的地址取出,赋值给一个“想要转换成的”数据类型的地址(也就是指针),然后取需要的内存单元中的内容就可以了
例如对一个赋了值的十六进制的变量n,需要转换成float型的,就是先取其地址&n,赋给一个float型的指针,也就是(float*)&n,然后取指针的内容*(float)&n就可以了。
需要注意的是,这个方法只适用于所需转换的数据在内存中所占大小与需要转换成的数据类型在内存中所占大小相同的情况(如VC6中,float型数据占4个字节,而每个字节是两位十六进制数,4个字节也就是八位十六进制数,正好等于你需要转换的十六进制数的位数,故此方法可行)
希望我的回答能帮到你~!
以下附上参考程序段:
#include <stdio.h>

float Hex_To_Decimal(unsigned char *Byte,int num)//十六进制到浮点数
{
// char cByte[4];//方法一
// for (int i=0;i<num;i++)
// {
// cByte[i] = Byte[i];
// }
//
// float pfValue=*(float*)&cByte;
//return pfValue;

return *((float*)Byte);//方法二
}

long FloatTohex(float HEX)//浮点数到十六进制转换1
{
return *( long *)&HEX;
}

void FloatToByte(float floatNum,unsigned char* byteArry)////浮点数到十六进制转换2
{
char* pchar=(char*)&floatNum;
for(int i=0;i<sizeof(float);i++)
{
*byteArry=*pchar;
pchar++;
byteArry++;

}
}

void main()
{

unsigned char floatToHex[4];
unsigned char hexbyte[4]={0xd0,0x0f,0x49,0x40};//传输数据为3d cc cc cd,0xcd,0xCC,0xCC,0x3D,40490fd0

float Hdecimal=0.0;
float flh=0.4;
Hdecimal=Hex_To_Decimal(hexbyte,sizeof(hexbyte));//十六进制转换为浮点数
printf("\n 浮点数为:\n %f\n",Hdecimal);

long hX=FloatTohex(Hdecimal);//浮点数转换为十六进制一

printf("\n正序十六进制值:\n %f=%X \n",Hdecimal,hX);//正序显示

FloatToByte(Hdecimal,floatToHex);//浮点数转为十六进制二

printf("\n倒序十六进制:\n%f=%x %x %x %x\n",Hdecimal,floatToHex[0],floatToHex[1],floatToHex[2],floatToHex[3] );//倒序显示
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-11-28
#include<stdio.h>
int main()
{
long int n; //Tc3.0好像是16位编译器
printf("输入8位16进制数:");
scanf("%x",&n);
printf("%f\n",*((float*)&n));
return 0;

}

运行结果

输入8位16进制数:40490fd0
3.141590
Press any key to continue追问

这个程序代码你试了吗?有用吗?我在turbo C++3.0试了,不行呀,结果是-0.00000,你用的什么编译器呀?

追答

我用Dev c++和 vc2010 都运行过这个,没问题的,TC3.0太老了,都快20年了

Tc3.0的scanf()函数可能不支持%x输入格式,可以以字符串方式解决
#include
#include
int main()
{
char hexstr[9];
char *pc=hexstr;
long int n=0;
float * pf=(float*)&n ;
printf("n=");
gets(hexstr);
while(*pc)
{
if('0'<=*pc&&*pc<='9')
*pc=*pc-'0';
if('A'<=*pc&&*pc<='F')
*pc= 10+*pc-'A';
if('a'<=*pc&&*pc<='f')
*pc= 10+*pc-'a';
n=n*16+*pc;
pc++;
}
printf("%f",*pf);
getch();
return 0;
}

本回答被提问者采纳