四位16進制轉換成浮點型,如何實作
單片機回傳的資料為:43 B6 D9 9A 4位16進制
轉換才浮點型為:365.7
求助如何實作,最好是貼出代碼,謝謝
uj5u.com熱心網友回復:
應該不止這四個,根據大小端的不同,在它前后應該還有 00 00 00 00uj5u.com熱心網友回復:
單精度浮點是4位元組的,雙精度浮點才如樓上所說的前后有4個00,樓上有一點說的是對的,要注意大端 小端問題,最簡單的轉換方法是使用指標,示例代碼如下。var
data: Cardinal;
pf: PSingle;
begin
data := $43B6D99A;
pf := @data;
ShowMessage(FloatToStr(pf^));
end;
uj5u.com熱心網友回復:
Delphi支持absolute addresses,可以直接:var
data: Cardinal;
f: Single absolute data;
begin
data := $43B6D99A;
ShowMessage(Format('%8.2f', [f]));
end;
uj5u.com熱心網友回復:
function HextoFloat(s:string):real;
var b,temp:string;
e:integer;
f:real;
begin
b:=HextoBinary(s);
temp := copy(b,2,8);
e:=BintoInt(temp)-127;
temp := copy(b,10,23);
f := 1+floatBintoInt(temp);
if(copy(b,1,1)='0')then
result := power(2,e)*f
else
result :=-power(2,e)*f;
end;
uj5u.com熱心網友回復:
還可以用復合結構,比較直觀,單片機一般用單精度浮點,注意高低位元組,整形數在電腦里是低位元組在前的
//單精度浮點數表示
TSingleRecord = record
case Integer of
0: (bLL,bLH,bHL,bHH:Byte); //低位元組在前
1: (wl,wh:Word); //低字在前
2: (Value:Single); //浮點數
end;
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/76038.html
標籤:網絡通信/分布式開發
上一篇:天于Delphi的埠復用問題
