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

作者: a22326284 (chin)   2016-02-25 00:31:22
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
IAR
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)

問題(Question):
感測器轉換完的資料用Float的變數儲存
但傳輸的Buffer是定義為Unsigned Char
請問該如何藉由此Buffer傳資料
餵入的資料(Input):
Float的資料
預期的正確結果(Expected Output):
能在接收端收到有小數點的資料
錯誤結果(Wrong Output):
程式碼(Code):(請善用置底文網頁, 記得排版)
補充說明(Supplement):
作者: longlongint (華哥爾)   2016-02-25 01:17:00
http://goo.gl/2LRjnrJava: How to convert a String of Binary values toa Float and vice-versa?啊 看錯版了......偷吃步 http://goo.gl/KqhmkQ先用偷吃步試試看 如果不行就找api或照格式自刻
作者: stupid0319 (徵女友)   2016-02-25 04:16:00
union char[4] and float ?
作者: chuegou (chuegou)   2016-02-25 09:40:00
union也不錯,不過我現在是用指標指到float開頭
作者: ss780217 (Wade)   2016-02-25 10:03:00
union最簡單
作者: qscgy4 (有點厲害)   2016-02-25 10:12:00
我用敘述的講一次,實作不會再說…1.假設你的有效小數要兩位2. 先乘100,存入int變數3.假設int為32bit,你就要拆成4個byte,存到unsigned char4.接收端接收這4個byte後,重組並除100存入float變數補充:建議可以加入checksum
作者: x000032001 (版廢了該走了)   2016-02-25 16:35:00
那就直接把float拆成4bytes 不是最快
作者: qscgy4 (有點厲害)   2016-02-25 16:49:00
樓上不懂可不可以不要出來嘴?1.假設他的接收端浮點數不是4byte,你要怎麼處理?2.我說的方法可以在在不同變數大小輕易轉換,不用任何lib3.不用任何lib的狀況下,我是不會拆浮點數啦可以教一下嗎?
作者: askacis (ASKA)   2016-02-25 17:54:00
IEEE754轉出來丟過去就好了,接受端一樣解回來
作者: x000032001 (版廢了該走了)   2016-02-25 17:56:00
對阿 就IEEE754 頂多轉8bytes再傳 這麼兇喔 QQ
作者: askacis (ASKA)   2016-02-25 17:59:00
而且IEEE754不用什麼lib啊,Bit wise弄一下就好我想應該有大一程度應該就會拆浮點數了^^資料封裝這些東西都有RFC可以看,可以參考RFC4506
作者: a22326284 (chin)   2016-02-25 19:39:00
板上太多高手了 我有看了一下union應該也是一種方法但小弟我昨天還有找到一個叫snprintf的函式 它也可以將浮點數直接格式化成字串 不知道這樣會不會有什麼缺點
作者: Caesar08 (Caesar)   2016-02-25 19:41:00
作者: qscgy4 (有點厲害)   2016-02-25 19:56:00
sorry, 小弟不才,受教了,沒用過union這個方法之前都是為了避免 MUC與電腦的變數大小不同才這樣做回 Caesar08 轉字串可以,但比較沒效率,浪費空間還有時間
作者: Caesar08 (Caesar)   2016-02-25 20:19:00
qscgy4,但他的buffer是unsigned char,有更好的方法嗎?
作者: qscgy4 (有點厲害)   2016-02-25 20:21:00
假設你要傳字串傳一個float長度會不固定,或是固定很長另外value->char,再char->value 很沒效率我都是照我上面講的做法做,變成int後分別右移8,16,24,32存入要傳輸的unsinged char,最後做checksum丟出去另外更正一樣是MCU...打錯了= =
作者: chuegou (chuegou)   2016-02-25 22:07:00
推 qscgy4: 樓上不懂可不可以不要出來嘴? 這wwwwunion跟指標陣列都可以拆,原本想說你推很辛苦不想吐槽你結果超兇der
作者: ronin728 (浪人)   2016-02-26 03:51:00
用union的話會不會有byte order的問題?雖然我沒確認過會不會在這發生,但多留意一下為妙
作者: k1400 (德州家康)   2016-02-26 08:42:00
不懂可不可以不要出來嘴?
作者: stupid0319 (徵女友)   2016-02-26 12:03:00
原PO也沒說Buffer是序列還是並列,不知道大家在吵什麼如果是8個腳位的並列Buffer,那實作方式還是有差別的以感測器的規格跟Sample為準吧,原廠應該都有資料沒有原廠的資料來問,誰會知道感測器原廠的晶片怎寫的

Links booklink

Contact Us: admin [ a t ] ucptt.com