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