※ 引述《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等等的好像也都沒用
不知道這種問題要怎麼處理 謝謝