byte[] a = new byte[4]; a[0] = 182; a[1] = 243; a[2] = 157; a[3] = 63; Console.WriteLine(BitConverter.ToSingle(a, 0)); Console.Read(); ---------------------------------------------------- 事实上a[0]取179-186中的任何一个,在C#里都会输出1.234,不过你可以用下面这个办法反过来求byte[]: Single s = 1.234F; byte[] b = BitConverter.GetBytes(s); foreach (byte dd in b) { Console.WriteLine(dd); }
一、浮点数在内存中的表示
对于浮点类型的数据采用单精度类型(float)和双精度类型(double)来存储,float数据占用32bit,double数据占用64bit。不论是float还是double在存储方式上都是遵从IEEE的规范的,float遵从的是IEEE R32.24 ,而double 遵从的是R64.53。
无论是单精度还是双精度在存储中都分为三个部分:
1. 符号位(Sign) : 0代表正,1代表为负
2. 指数位(Exponent): 用于存储科学计数法中的指数数据,并且采用移位存储
3. 尾数部分(Mantissa): 尾数部分
即是所谓的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类!