展开全部
//程序在VC6下实验过
#include <stdio.h>
int main(void)
{
float f = 2.5422, value = 0; //f可改为其他的数试试
float *pf = &f;
char i, array[4];
//for循环将float在内存的四个字节按顺序分别存到一个字符数组(放一个float数用的数组大少一般用4)中
for(i = 4; i > 0; i--)
{
//强制类型转换,语句换成array[i - 1] = ((char *)pf)[i - 1];
array[i - 1] = *( (char *)pf + (i - 1));
}
value = *((float *)array); //将在内存相邻的四字节强制转换成float的地址再取值
printf("%f %f\n", value, f); //输出的值与初始化的值可能有一定的小误差
return 0;
}
如对上述程序有疑问可求解
#include <stdio.h>
int main(void)
{
float f = 2.5422, value = 0; //f可改为其他的数试试
float *pf = &f;
char i, array[4];
//for循环将float在内存的四个字节按顺序分别存到一个字符数组(放一个float数用的数组大少一般用4)中
for(i = 4; i > 0; i--)
{
//强制类型转换,语句换成array[i - 1] = ((char *)pf)[i - 1];
array[i - 1] = *( (char *)pf + (i - 1));
}
value = *((float *)array); //将在内存相邻的四字节强制转换成float的地址再取值
printf("%f %f\n", value, f); //输出的值与初始化的值可能有一定的小误差
return 0;
}
如对上述程序有疑问可求解
追问
哎~~我要的好像是将32位二进制转换成浮点数呢~~
追答
value = *((float *)array); //将在内存相邻的四字节强制转换成float的地址再取值
该语句就是将相邻的四个字节(32位)强制类型转换成float数
在于振南的51单片机视频略有讲解怎么可将浮点数发送出去(原理与上面的方法相同,在存储地址上做文章)
提醒一句:上面和下面的方法的正确性需保证发送的设备和接收的设备是同一种存储模式(大/小端子模式)
如需了解原理可自己查找讲解内存存储方式的相关书籍,
如需将float转换成字符发送还可以用联合union(还节约了内存,跟别人分享可别说是我告诉你的)
(如不太了解联合请查找讲解关于union的书籍,可看看C语言深度解剖一书的union关键字小节,该节还讲解了大小端子模式的存储方式)
下面介绍用联合的方法
例:
利用联合将20个float数发送到其他的接收设备
#define SIZE 20
union name
{
float f_array[SIZE];
char ch_array[SIZE * 4];
};
将需发送的float存到name联合的f_array数组中,再发送在内存中与要发的float数相对应的联合中的四个字节的ch_array数组元素发送到接收设备
之后再接收设备也定义相应(或相同)的联合的字符数组接收发来的字符数据,需要用时可直接引用相应的float数组的元素即可
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询