float型数据与字节数组的转化
MCU和PC的浮点数都是基于IEEE754格式的。有4字节(float)、8字节(double)、10字节(有一些不支持)。这里以4字节(float)浮点数为例。
一、C语言
转化常见的方法有:
1、强制指针类型转换。
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、使用结构和联合
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位无符号整数。包含的方法如下:
名称 | 说明 |
将指定的双精度浮点数转换为 64 位有符号整数。 | |
以字节数组的形式返回指定的布尔值。 | |
以字节数组的形式返回指定的 Unicode 字符值。 | |
以字节数组的形式返回指定的双精度浮点值。 | |
以字节数组的形式返回指定的 16 位有符号整数值。 | |
以字节数组的形式返回指定的 32 位有符号整数值。 | |
以字节数组的形式返回指定的 64 位有符号整数值。 | |
以字节数组的形式返回指定的单精度浮点值。 | |
以字节数组的形式返回指定的 16 位无符号整数值。 | |
以字节数组的形式返回指定的 32 位无符号整数值。 | |
以字节数组的形式返回指定的 64 位无符号整数值。 | |
将指定的 64 位有符号整数转换成双精度浮点数。 | |
返回由字节数组中指定位置的一个字节转换来的布尔值。 | |
返回由字节数组中指定位置的两个字节转换来的 Unicode 字符。 | |
返回由字节数组中指定位置的八个字节转换来的双精度浮点数。 | |
返回由字节数组中指定位置的两个字节转换来的 16 位有符号整数。 | |
返回由字节数组中指定位置的四个字节转换来的 32 位有符号整数。 | |
返回由字节数组中指定位置的八个字节转换来的 64 位有符号整数。 | |
返回由字节数组中指定位置的四个字节转换来的单精度浮点数。 | |
将指定的字节数组的每个元素的数值转换为它的等效十六进制字符串表示形式。 | |
将指定的字节子数组的每个元素的数值转换为它的等效十六进制字符串表示形式。 | |
将指定的字节子数组的每个元素的数值转换为它的等效十六进制字符串表示形式。 | |
返回由字节数组中指定位置的两个字节转换来的 16 位无符号整数。 | |
返回由字节数组中指定位置的四个字节转换来的 32 位无符号整数。 | |
返回由字节数组中指定位置的八个字节转换来的 64 位无符号整数。 |
<p><span style="font-size:18px"></span></p>