作者wxtab019 (天霜凝月)
看板C_and_CPP
标题Re: [问题]Float的资料用Char的Buffer传输
时间Mon Jun 6 03:47:16 2016
※ 引述《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等等的好像也都没用
不知道这种问题要怎麽处理 谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.123.124.28
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1465156038.A.680.html
1F:→ wxtab019: 目前用ASCII直接-48 或是比对char字元的可以0~9 06/06 08:06
2F:→ wxtab019: 不过就没办法像之前那样送整串数字...还在想怎麽改 06/06 08:07
3F:→ hichcock: atof, sprintf....不行吗 06/06 10:02
4F:→ longlongint: ssanf 06/06 10:11
5F:→ wxtab019: sprintf好像要的相反 然後是sscanf() ? 06/06 10:26
7F:→ wxtab019: 乱试一堆方法 结果还是都没有 输入的是3 06/06 10:33
※ 编辑: wxtab019 (140.123.124.28), 06/06/2016 10:33:54
8F:→ cs8425: float在记忆体不就是4个byte 直接传4个byte过去 06/06 11:44
9F:→ cs8425: 另一边再把那4个byte放回去很难? 06/06 11:44
10F:→ shadow0326: input是binary才需要那个union最转换吧 06/06 12:06
11F:→ shadow0326: 做 06/06 12:07
12F:→ shadow0326: 你现在input是c-string 干麻不用atof就好 06/06 12:07
13F:推 chuegou: Float_Data.Full = 3.; 我想应该要这样 06/06 13:40
14F:→ chuegou: 但是你又说强制转换没用... 06/06 13:41
15F:→ wxtab019: 就像上面那张图试的一样 虽然也不知道有没有错 06/06 14:51