单片机中,浮点数常用3字节浮点数表示
将浮点数表示成如下形式进行存储:
M为尾数,0<=M<1;
E为阶码,是指数部分;
C为基数,二进制数的C取2。
上位机从单片机中读取到的字节数据不能直接使用,需要进行转换,以下是在C#中用到的一个转换函数
1 //将3字节浮点数据转换成float
2 static double ToSingle3(byte A, byte B, byte C)
3 {
4 double v = 0;
5 int sign0 = (A & 0x80) == 0 ? 1 : -1; // 尾数的符号
6 int sign1 = (A & 0x40) == 0 ? 1 : -1; // 指数的符号
7 int e =sign1*( (sign1 == 1) ? (A & 0x3F) :(((A - 1) & 0x3F) ^ 0x3F) ); //指数
8 double t = Math.Pow(2,e);
9 for (int i = 1; i < 9; i++)
10 {
11 t /= 2;
12 if ((((B >> (8-i)))&1) == 1)
13 {
14 v +=t;
15 }
16 }
17 for (int i = 1; i < 9; i++)
18 {
19 t /= 2;
20 if ((((C >> (8 - i))) & 1) == 1)
21 {
22 v += t;
23 }
24 }
25 return v;
26 }
时间: 2024-10-21 22:06:02