float型数据与字节数组的转化
float型数据与字节数组的转化
MCU和PC的浮点数都是基于IEEE754格式的。有4字节(float)、8字节(double)、10字节(有⼀些不⽀持)。这⾥以4字节(float)浮点数为例。
⼀、C语⾔转化常见的⽅法有: 1、强制指针类型转换。
[html] view plain copy
1. //转换float数据到字节数组
2. unsigned char i;
3. float floatVariable;
4. unsigned char charArray[4];
5. (unsigned char) *pdata = ((unsigned char)*)&floatVariable;  //把float类型的指针强制转换
为unsigned char型
6. for(i=0;i<4;i++)
7. {
8.    charArray[i] = *pdata++;//把相应地址中的数据保存到unsigned char数组中
9. }
10.
11. //转换字节数组到float数据
12. float  floatVariable;
13. unsigned char  i;
14. void  *pf;
15. pf = &floatVariable;
16. (unsigned char) * px = charArray;
17.
18. for(i=0;i<4;i++)
19. {
20.    *(((unsigned char)*)pf+i)=*(px+i);
21. }
2、使⽤结构和联合
[html] view plain copy
1. //定义结构和联合
2. typedef union
3. {
4.    struct
5.    {
6.        unsigned char low_byte;
7.        unsigned char mlow_byte;
8.        unsigned char mhigh_byte;
9.        unsigned char high_byte;
10.      }float_byte;
11.
12.      float  value;
13. }FLAOT_UNION;
这样可以在程序中直接对各数据赋值,然后获取数据。如对float_byte中的各字节赋值,可以直接从value中获取float型数据,反之亦然。
注意,从上⾯的转换可以看到,对于定义的数组unsignedchar charArray[4],⼀般charArray[0]
代表低字节,charArray[3]代表⾼字节。
⼆、c#
在c#中可以使⽤BitConverter类中的函数进⾏转换,如下:
名称说明
GetBytes(Double)以字节数组的形式返回指定的双精度浮点值。
GetBytes(Single)以字节数组的形式返回指定的单精度浮点值。
ToDouble返回由字节数组中指定位置的⼋个字节转换来的双精
度浮点数。
ToSingle返回由字节数组中指定位置的四个字节转换来的单精
度浮点数。
BitConverter类进⾏基础数据类型与字节数组之间的相互转换,此类便于操作基本形式的类型。⼀个字节定义为⼀个 8位⽆符号整数。包含的⽅法如下:
名称说明
DoubleToInt64Bits将指定的双精度浮点数转换为 64 位有符号整数。
GetBytes(Boolean)以字节数组的形式返回指定的布尔值。
GetBytes(Char)以字节数组的形式返回指定的 Unicode 字符值。
GetBytes(Double)以字节数组的形式返回指定的双精度浮点值。
GetBytes(Int16)以字节数组的形式返回指定的 16 位有符号整数
浮点型变量float值。
GetBytes(Int32)以字节数组的形式返回指定的 32 位有符号整数
值。
GetBytes(Int64)以字节数组的形式返回指定的 64 位有符号整数
值。
GetBytes(Single)以字节数组的形式返回指定的单精度浮点值。
GetBytes(UInt16)以字节数组的形式返回指定的 16 位⽆符号整数
值。
GetBytes(UInt32)以字节数组的形式返回指定的 32 位⽆符号整数
值。
GetBytes(UInt64)以字节数组的形式返回指定的 64 位⽆符号整数
值。
Int64BitsToDouble将指定的 64 位有符号整数转换成双精度浮点数。
ToBoolean返回由字节数组中指定位置的⼀个字节转换来的
布尔值。
ToChar返回由字节数组中指定位置的两个字节转换来的
Unicode 字符。
ToDouble返回由字节数组中指定位置的⼋个字节转换来的
双精度浮点数。
ToInt16返回由字节数组中指定位置的两个字节转换来的
16 位有符号整数。
ToInt32返回由字节数组中指定位置的四个字节转换来的
32 位有符号整数。
ToInt64返回由字节数组中指定位置的⼋个字节转换来的
64 位有符号整数。
ToSingle返回由字节数组中指定位置的四个字节转换来的
单精度浮点数。
ToString( array<Byte [] ()>[])将指定的字节数组的每个元素的数值转换为它的等效⼗六进制字符串表⽰形式。
ToString( array<Byte [] ()>[], Int32)将指定的字节⼦数组的每个元素的数值转换为它的等效⼗六进制字符串表⽰形式。
ToString( array<Byte [] ()>[], Int32, Int32)将指定的字节⼦数组的每个元素的数值转换为它的等效⼗六进制字符串表⽰形式。
ToUInt16返回由字节数组中指定位置的两个字节转换来的
16 位⽆符号整数。
ToUInt32返回由字节数组中指定位置的四个字节转换来的
32 位⽆符号整数。
ToUInt64返回由字节数组中指定位置的⼋个字节转换来的
64 位⽆符号整数。
[cpp] view plain copy
1. <p><span ></span></p>

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。