Re: [問題]Float的資料用Char的Buffer傳輸

看板C_and_CPP作者 (天霜凝月)時間8年前 (2016/06/06 03:47), 8年前編輯推噓1(1014)
留言15則, 6人參與, 最新討論串4/5 (看更多)
※ 引述《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

06/06 08:06, , 1F
目前用ASCII直接-48 或是比對char字元的可以0~9
06/06 08:06, 1F

06/06 08:07, , 2F
不過就沒辦法像之前那樣送整串數字...還在想怎麼改
06/06 08:07, 2F

06/06 10:02, , 3F
atof, sprintf....不行嗎
06/06 10:02, 3F

06/06 10:11, , 4F
ssanf
06/06 10:11, 4F

06/06 10:26, , 5F
sprintf好像要的相反 然後是sscanf() ?
06/06 10:26, 5F

06/06 10:32, , 6F

06/06 10:33, , 7F
亂試一堆方法 結果還是都沒有 輸入的是3
06/06 10:33, 7F
※ 編輯: wxtab019 (140.123.124.28), 06/06/2016 10:33:54

06/06 11:44, , 8F
float在記憶體不就是4個byte 直接傳4個byte過去
06/06 11:44, 8F

06/06 11:44, , 9F
另一邊再把那4個byte放回去很難?
06/06 11:44, 9F

06/06 12:06, , 10F
input是binary才需要那個union最轉換吧
06/06 12:06, 10F

06/06 12:07, , 11F
06/06 12:07, 11F

06/06 12:07, , 12F
你現在input是c-string 幹麻不用atof就好
06/06 12:07, 12F

06/06 13:40, , 13F
Float_Data.Full = 3.; 我想應該要這樣
06/06 13:40, 13F

06/06 13:41, , 14F
但是你又說強制轉換沒用...
06/06 13:41, 14F

06/06 14:51, , 15F
就像上面那張圖試的一樣 雖然也不知道有沒有錯
06/06 14:51, 15F
文章代碼(AID): #1NL876Q0 (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1NL876Q0 (C_and_CPP)