找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 11570|回復(fù): 3
收起左側(cè)

C語言浮點數(shù)轉(zhuǎn)十六進制(經(jīng)驗)

[復(fù)制鏈接]
ID:371450 發(fā)表于 2018-7-14 14:36 | 顯示全部樓層 |閱讀模式
浮點轉(zhuǎn)十六進制:
/*作用:浮點數(shù)---轉(zhuǎn)---十六進制 */
union fnum
{
long int m;
float f;
};
然后需要在引用的函數(shù)內(nèi)聲明共用體比如:
union fnum num;
用法:共用體是將 多個成員變量共用一個地址,并且同一時刻只允許1個成員變量被賦值,當某個成員變量修改后,其他的成員立刻改變,
比如:num.f=6.91;那么num.m=0x40DD1EB8;
當num.f=6.0時,另一個成員變量也改變num.m=40C00000
因為,單片機的十進制和十六進制都可以進行直接計算,所以用以上辦法就可以實現(xiàn)浮點數(shù)轉(zhuǎn)十六進制.
通俗的講:共用體就像一個容器,成員變量就是不同形狀的容器出口,當我們把1個圓形的物體放進去,如果這時我們像要一個方形的物體,那么就從方形的出口將物體取出,就得到方形了,
同理,我們要浮點轉(zhuǎn)十六進制,就把浮點放進共用體(num.f=6.91),然后從整形取出( Rec=num.m )
細節(jié)問題:
因為浮點數(shù)轉(zhuǎn)成十六進制后,通常都是32位數(shù)據(jù),所以我們在取出整形數(shù)的時候要 用一個32位的變量(long int,或者u32 ) 去存.
2. 共用體和結(jié)構(gòu)體的區(qū)別
  共用體和結(jié)構(gòu)體有下列區(qū)別:
  1. 共用體和結(jié)構(gòu)體都是由多個不同的數(shù)據(jù)類型成員組成,
  但在任何同一時刻, 共用體只存放了一個被選中的成員, 而結(jié)構(gòu)體的所有成員都存在。
  2. 對于共用體的不同成員賦值, 將會對其它成員重寫, 原來成員的值就不存在了,
  而對于結(jié)構(gòu)體的不同成員賦值是互不影響的。 另外要注意的是,


計算串口接收到的浮點數(shù):
我們通常在接收到串口的數(shù)字時, 基本上都是文本類型的數(shù)字, 并且是一位一位的文本,
比如6.19就是 ‘6’, ’.’ , ’1’ , ’9’
我們將它重新變?yōu)?.19需要進行一下操作:
Arr[]={‘6’,’.’,’1’,’9’}
1. 所有文本類型的數(shù)字只有 減零 之后才可以進行計算,否則是文本型.
  Arr[0]-‘0’;
2. 特別注意

sum_num= (float)(arr[6]-'0')+
(float)(arr[8]-'0')/10 +(float)(arr[9]-'0')/ 100;
在計算的時候,小數(shù)部分要轉(zhuǎn)換成 小數(shù),然后進行相加,
注意的是 在(float) (arr[8]-'0')/10的時候, 前面要先強制裝換成(float)之后 才可以/10,這樣才是把 1變成0.1,
如果在/10之前 沒有(float)的話,意味著取10的倍數(shù),
如果是 1/10,不加(float),那就等于0;最后相加就等于6.00000;
正確:
3. 注意細節(jié):
成功將Arr[]={‘6’,’.’,’1’,’9’}
組合成sum_num =6.19之后, 在進行判斷sum_num時:
if(sum_num == 62.91f) { LED1=0; }
注意這里的62.91后面加f,如果不加會報警告:
:單精度操作數(shù)隱式轉(zhuǎn)換為雙精度
當if(sum_num == 62.91) { LED1=0; }
這里的sum_num是浮點型,而62.91默認是雙精度類型的;
當2個不同類型的變量 相加減時,會將二者都轉(zhuǎn)換成較大一方的類型,
所以 浮點數(shù) 和 雙精度進行判斷時:浮點數(shù)會被轉(zhuǎn)換成雙精度.所以會報警告,告訴你這里進行了這樣的操作.
當if(sum_num == 62.91f) { LED1=0; }這里的62.91f
是將62.91轉(zhuǎn)換成浮點數(shù)
浮點數(shù) 和 浮點數(shù)進行判斷 或者 計算,并不會轉(zhuǎn)換成雙精度,警告自然沒了
下面附上 我自己研發(fā)的一些筆記,也都是經(jīng)驗

51單片機-自己整理.doc

102 KB, 下載次數(shù): 57, 下載積分: 黑幣 -5

經(jīng)驗筆記

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:409831 發(fā)表于 2021-1-23 17:41 | 顯示全部樓層
很好,謝謝分享!受教了。。
回復(fù)

使用道具 舉報

ID:114583 發(fā)表于 2018-9-1 14:00 | 顯示全部樓層
總結(jié)的很棒,很受益
回復(fù)

使用道具 舉報

ID:371450 發(fā)表于 2018-7-14 14:37 | 顯示全部樓層
自己先頂
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表