Re: [問題]Float的資料用Char的Buffer傳輸
※ 引述《MasterChang (我愛ASM)》之銘言:
: : → x000032001: 那就直接把float拆成4bytes 不是最快 02/25 16:35
: : 推 qscgy4: 樓上不懂可不可以不要出來嘴? 02/25 16:49
: : → qscgy4: 1.假設他的接收端浮點數不是4byte,你要怎麼處理? 02/25 16:51
: : → qscgy4: 2.我說的方法可以在在不同變數大小輕易轉換,不用任何lib 02/25 16:52
: : → qscgy4: 3.不用任何lib的狀況下,我是不會拆浮點數啦 02/25 16:55
: : → qscgy4: 可以教一下嗎? 02/25 16:55
: float 4 bytes, double 8 bytes 這個應該沒問題吧?
: 有疑問其實用sizeof()確認一下就好。
: #pragma pack(push)
: #pragma pack(1)
: typedef union{
: float f;
: char b[4];
: }Fto4Bytes_t;
: #pragma pack(pop)
: 這個不需要library....轉個念而已。
union是最直覺的方式
我剛開始也是用union
後來發覺前輩都用指標(雖然我不知道那個比較好)
先確認一下大小
float 4byte
char 1byte
------------------------
float f;
char *cptr = (char*)&f;
// 宣告char(1byte)指標cptr指向浮點數f
// 用*(cptr+0) , *(cptr+1), *(cptr+2), *(cptr+3)來對f進行操作
// 或用 cptr[0] , cptr[1], cptr[2], cptr[3]來對f進行操作
------------------------
這裡要注意的是有些MCU的高位低位順序會不一樣
傳到另一邊重組起來的時候要注意
因為我感覺原PO是在兩個不同平台上作業
先提醒一下
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.230.110.157
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1456410384.A.3C3.html
→
02/26 03:55, , 1F
02/26 03:55, 1F
推
02/26 03:57, , 2F
02/26 03:57, 2F
→
02/26 11:24, , 3F
02/26 11:24, 3F
原來是叫做這兩個名稱
我一直不知道這個現象要怎麼說明XD
感謝補充
※ 編輯: chuegou (36.230.110.157), 02/26/2016 15:44:28
→
02/26 19:10, , 4F
02/26 19:10, 4F
→
02/26 22:20, , 5F
02/26 22:20, 5F
→
02/26 22:21, , 6F
02/26 22:21, 6F
→
02/26 22:22, , 7F
02/26 22:22, 7F
→
02/26 22:25, , 8F
02/26 22:25, 8F
推
02/26 22:51, , 9F
02/26 22:51, 9F
推
別逼我!!!
※ 編輯: chuegou (36.230.110.157), 02/26/2016 22:55:11
→
02/27 01:26, , 10F
02/27 01:26, 10F
推
02/27 11:52, , 11F
02/27 11:52, 11F
→
02/28 09:02, , 12F
02/28 09:02, 12F
推
02/28 13:45, , 13F
02/28 13:45, 13F
→
03/08 01:31, , 14F
03/08 01:31, 14F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 5 篇):