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