Re: [問題]Float的資料用Char的Buffer傳輸

作者: chuegou (chuegou)   2016-02-25 22:26:20
※ 引述《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
作者: ronin728 (浪人)   2016-02-26 03:55:00
以前聽說過byte order的問題,在這會出現嗎? 有點怕怕的原po我對不起你,剛剛文章我沒看到最後一段,感謝說明
作者: shadow0326 (非議)   2016-02-26 11:24:00
確認一下轉出和轉入的機器是什麼endian就好
作者: bdvstg (bdvstg)   2016-02-26 19:10:00
大印地安 小印地安 不同機器傳還蠻常遇到的 轉一下就好
作者: LPH66 (-6.2598534e+18f)   2016-02-26 22:20:00
不是印地安, 是大頭小頭...這詞是出自《格列佛遊記》的就那個要從蛋的大頭敲開還是小頭敲開的那個故事所以那是從 end 衍生成的 endian 這詞, 跟 Indian 完全不同
作者: chuegou (chuegou)   2016-02-26 22:25:00
居然還有語源考證!給樓上推
作者: bdvstg (bdvstg)   2016-02-26 22:51:00
喔喔喔~~!! 原來還有這典故 推!!! 樓上說好的推呢?XDDDD
作者: Caesar08 (Caesar)   2016-02-27 11:52:00
推LPH66
作者: fgkor123 (n(N))   2016-02-28 09:02:00
蠻有趣的
作者: lc85301 (pomelocandy)   2016-02-28 13:45:00
推語源考證XDD
作者: linotwo (._.)   2016-03-08 01:31:00
在 buffer 塞一個 flag 表示 endianness 就好

Links booklink

Contact Us: admin [ a t ] ucptt.com