用四个字节十六进制数表示单精度浮点数 四字节16进制转浮点数

即是所谓的IEEE754标准,这也是大多数硬件存储浮点数的标准。单精度浮点数占4个字节,表示范围为:在负数的时候是从-3.402823E38 到 -1.401298E-45,而在正数的时候是从 1.401298E-45 到 3.402823E38。

在C#中的转换函数为:

1,由四个字节的十六机制数组转浮点数:

byte[] bytes = new byte[4];

BitConverter.ToSingle(bytes, 0);

2,由浮点数转数组:

byte[] bytes = BitConverter.GetBytes(floatValue);

这种转换方法经常用于串口通讯中,表示范围足够各种传感器数值传输及工控场合,将要发送的浮点数据转换为4个字节的十六机制数,然后由串口发出,在接收端再将其转换为浮点数。

单片机或非.net环境下使用转换程序则不能调用BitConverter类!

提供以下代码以供转换:

未修改过的如下:可以在C#中直接调用而不用库函数

public static float ToFloat(byte[] data)
{
float a = 0;
byte i;
byte[] x = data;
unsafe
{
void* pf;
fixed (byte* px = x)
{
pf = &a;
for (i = 0; i < data.Length; i++)
{
*((byte*)pf + i) = *(px + i);
}
}
}


return a;
}

public static byte[] ToByte(float data)
{
unsafe
用四个字节十六进制数表示单精度浮点数 四字节16进制转浮点数
{
byte* pdata = (byte*)&data;
byte[] byteArray = new byte[sizeof(float)];
for (int i = 0; i < sizeof(float); ++i)
byteArray[i] = *pdata++;

return byteArray;
}
}

如果对工程进行直接编译会报出一下错误:这是因为C#默认不提供指针支持,只有在不安全代码的形式下才可以用指针。

错误1不安全代码只会在使用 /unsafe编译的情况下出现E:Visual Studio2008ProjectsTESTtestOfFloatConsolttestOfFloatConsoltProgram.cs2613testOfFloatConsolt
这时选择VS的菜单栏中的项目->"Project"属性->生成->常规->允许不安全代码勾选即可

单片机串口通讯浮点转换函数

我在AVR串口通信协议中用到了这部分,直接将单片机的运算结果(浮点类型)转换为(字节类型)嵌入串口通信协议中,上传至上位机。

下面为符合IEEE754标准将浮点数转换为四个字节的数组的函数源代码:已经用于mega16单片机的串口通信中。

WinAVR-20090313测试通过:

void FloatToByte(float floatNum,unsigned char* byteArry)
{
char*pchar=(char*)&floatNum;
for(inti=0;i<sizeof(float);i++)
{
*byteArry=*pchar;
pchar++;
byteArry++;
}
}

下面为符合IEEE754标准的由四个字节型数组转化为相应的浮点数

WinAVR-20090313测试通过:

floatByteToFloat(unsigned char*byteArry)
{
return *((float*)byteArry);
}

调用测试方法:其中USART_Transmit();为向串口发送的函数。

unsignedchar floatToByte[4];
FloatToByte(12.15,floatToByte);
floata=ByteToFloat(floatToByte);
FloatToByte(a,floatToByte);
USART_Transmit(floatToByte[0]);
USART_Transmit(floatToByte[1]);
USART_Transmit(floatToByte[2]);
USART_Transmit(floatToByte[3]);

在上位机用串口进行读取时调用

BitConverter.ToSingle(bytes, 0);

就会转换成12.15,测试方法可以随着需求改变。

  

爱华网本文地址 » http://www.aihuau.com/a/25101016/326912.html

更多阅读

二进制数与十六进制数之间如何互相转换 二进制转换十六进制

二进制数与十六进制数之间如何互相转换——简介二进制与十六进制之间的转换与二进制和八进制之间的转换很类似,今天我们来详细看一下:首先,我们来看一下数学关系即24=16,即用四位二进制表示一位八进制。二进制数与十六进制数之间如何互

十进制怎样转化成二进制? 二进制转化为十六进制

十进制怎样转化成二进制?——简介十进制怎样转化成二进制?我试图用图解的方法让你学会!不是很难,只要你认真看一遍,你就能掌握方法哦!十进制怎样转化成二进制?——常用方法十进制怎样转化成二进制? 1、假设我们要把十进制156转化成二进制!第

今日“天姥论坛”发贴:悟道大和尚四十六了字见性歌

  悟道大和尚驻锡新昌大佛寺十多年,实在是新昌人民之福。但老方丈西去已快三周年了,不知有多少新昌人民还会想到他。今发上大和尚之《三十六了字见性歌》,以志纪念。  缘起:10月19日贵宾报到的晚上,与同道在佛心广场拜见了小老(净友)法

以弗所书卷四 四章一节至十六节 在基督里合一 金庸群侠传x十六合一

   以弗所书【卷四】钟 马 田解经讲道丛书 四章一节至十六节在基督里合一钟马田著钟越娜译Reformed Study目录序﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒ 11.「因此」﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒

声明:《用四个字节十六进制数表示单精度浮点数 四字节16进制转浮点数》为网友白话情书分享!如侵犯到您的合法权益请联系我们删除