作者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://www.ptt.cc/bbs/C_and_CPP/M.1465156038.A.680.html
→ wxtab019: 目前用ASCII直接-48 或是比對char字元的可以0~9 06/06 08:06
→ wxtab019: 不過就沒辦法像之前那樣送整串數字...還在想怎麼改 06/06 08:07
→ hichcock: atof, sprintf....不行嗎 06/06 10:02
→ longlongint: ssanf 06/06 10:11
→ wxtab019: sprintf好像要的相反 然後是sscanf() ? 06/06 10:26
→ wxtab019: 亂試一堆方法 結果還是都沒有 輸入的是3 06/06 10:33
※ 編輯: wxtab019 (140.123.124.28), 06/06/2016 10:33:54
→ cs8425: float在記憶體不就是4個byte 直接傳4個byte過去 06/06 11:44
→ cs8425: 另一邊再把那4個byte放回去很難? 06/06 11:44
→ shadow0326: input是binary才需要那個union最轉換吧 06/06 12:06
→ shadow0326: 做 06/06 12:07
→ shadow0326: 你現在input是c-string 幹麻不用atof就好 06/06 12:07
推 chuegou: Float_Data.Full = 3.; 我想應該要這樣 06/06 13:40
→ chuegou: 但是你又說強制轉換沒用... 06/06 13:41
→ wxtab019: 就像上面那張圖試的一樣 雖然也不知道有沒有錯 06/06 14:51