IEEE754标准计算公式问题
我现在在开发一个项目,其中有一个要获取艾默生UPS电压电流等数据。
根据厂家提供的协议返回的数据,怎么计算都不对,可能是我算的有误。例如‘交流输出电流A’,我在现场看机器数据为219.9V,返回的16进制内容其中的一段对应的‘交流输出电流A’是36 36 45 36 35 42 34 33(数据较长,但是根据文档中说明该UPS浮点数据都根据IEEE754标准,此段数据应该是正确的,也就是说此段16进制数对应的浮点数据为219.9)。但是我自己计算时数据却差太多了,不知道是我计算错误还是返回数据有问题(应该是我的问题),有懂的大神们给解答下,谢谢。
附:IEEE754标准公式
16进制转换10进制浮点工具计算结果:
我的计算过程:
36 36 45 36 35 42 34 33
6 6 E 6 5 B 4 3
110 110 1110 110 101 1011 100 11
0110 0110 1110 0110 0101 1011 0100 0011
符号位(S)=0
阶码(E) =110 0110 1
尾数(M) =110 0110 0101 1011 0100 0011
符号位(S)=0
阶码(E) =205
尾数(M) =6708035
套用浮点数值公式:±(1+M*2的负23次方)*2的(E-127)次方
±(1+6708035*0.00000011920928955078125)*2的78次方
±(1+0.79966008663177490234375)*302231454903657293676544
±(1.79966008663177490234375)*302231454903657293676544
=±543913886314763254759424
=±5.4
备注:2的-1次方 = 1除以2的1次方
我的结果等于+5.4,工具计算结果=+2.7,机器上显示+219.9= =我表示很无奈。。求大神们解答。多谢
我使用C#程序开发的,C++不会= = IEEE754 算法 16进制转浮点型 UPS 电压电流
[解决办法]
你对标准理解有误,测试下:
static char Buf[16];
void __fastcall TForm1::Button1Click(TObject *Sender)
{
union
{
float X;
unsigned char XX[4];
};
X = 219.9;
BinToHex(XX, Buf, 4);
Caption = Buf;
}