Re: [问题]Float的资料用Char的Buffer传输

楼主: wxtab019 (天霜凝月)   2016-06-06 03:47:16
※ 引述《MasterChang (我爱ASM)》之铭言:
: 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....转个念而已。
我目前也是类似要送资料到嵌入式芯片里,
本来是用RS232送 是char 8bits合成一个float
union DataSpace
{
unsigned char Quarter[4];
float Full;
}Float_Data;
后面是用 Float_Data.Quarter[k]= (char) 接收到的值
不过现在想改成用蓝芽 不过发送的好像是ASCII
所以像是本来送1
改成蓝芽发送接收到的就会变成像是 Quarter[0]的 value是"1" decimal是49
可是这样出来的full就会变成错误的 虽然decimal还是49
不过因为是float 所以value就变了
=======================================
大概像是之前是一个float分成4个char的储存位置存
送3进去Float_Data.Full收到的就是3
不过现在因为直接送的是char 送进去只是存到Float_Data.Quarter[0]="3"的字串
Float_Data.Full出来的就不会是要的float 3这个值
本来想说单独抓Float_Data.Quarter[0]出来转换之类
试过什么float直接强制转换 或是atof等等的好像也都没用
不知道这种问题要怎么处理 谢谢
楼主: wxtab019 (天霜凝月)   2016-06-06 08:06:00
目前用ASCII直接-48 或是比对char字符的可以0~9不过就没办法像之前那样送整串数字...还在想怎么改
作者: hichcock (快乐一整年 ^^~~~)   2016-06-06 10:02:00
atof, sprintf....不行吗
作者: longlongint (华哥尔)   2016-06-06 10:11:00
ssanf
楼主: wxtab019 (天霜凝月)   2016-06-06 10:26:00
sprintf好像要的相反 然后是sscanf() ?http://i.imgur.com/ntZFgt4.png乱试一堆方法 结果还是都没有 输入的是3
作者: cs8425 (cs)   2016-06-06 11:44:00
float在内存不就是4个byte 直接传4个byte过去另一边再把那4个byte放回去很难?
作者: shadow0326 (非议)   2016-06-06 12:06:00
input是binary才需要那个union最转换吧做你现在input是c-string 干麻不用atof就好
作者: chuegou (chuegou)   2016-06-06 13:40:00
Float_Data.Full = 3.; 我想应该要这样但是你又说强制转换没用...
楼主: wxtab019 (天霜凝月)   2016-06-06 14:51:00
就像上面那张图试的一样 虽然也不知道有没有错

Links booklink

Contact Us: admin [ a t ] ucptt.com