※ 引述《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等等的好像也都没用
不知道这种问题要怎么处理 谢谢