開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
IAR
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
無
問題(Question):
感測器轉換完的資料用Float的變數儲存
但傳輸的Buffer是定義為Unsigned Char
請問該如何藉由此Buffer傳資料
餵入的資料(Input):
Float的資料
預期的正確結果(Expected Output):
能在接收端收到有小數點的資料
錯誤結果(Wrong Output):
程式碼(Code):(請善用置底文網頁, 記得排版)
補充說明(Supplement):
union char[4] and float ?
作者:
chuegou (chuegou)
2016-02-25 09:40:00union也不錯,不過我現在是用指標指到float開頭
作者:
qscgy4 (有點厲害)
2016-02-25 10:12:00我用敘述的講一次,實作不會再說…1.假設你的有效小數要兩位2. 先乘100,存入int變數3.假設int為32bit,你就要拆成4個byte,存到unsigned char4.接收端接收這4個byte後,重組並除100存入float變數補充:建議可以加入checksum
作者:
qscgy4 (有點厲害)
2016-02-25 16:49:00樓上不懂可不可以不要出來嘴?1.假設他的接收端浮點數不是4byte,你要怎麼處理?2.我說的方法可以在在不同變數大小輕易轉換,不用任何lib3.不用任何lib的狀況下,我是不會拆浮點數啦可以教一下嗎?
作者:
askacis (ASKA)
2016-02-25 17:54:00IEEE754轉出來丟過去就好了,接受端一樣解回來
對阿 就IEEE754 頂多轉8bytes再傳 這麼兇喔 QQ
作者:
askacis (ASKA)
2016-02-25 17:59:00而且IEEE754不用什麼lib啊,Bit wise弄一下就好我想應該有大一程度應該就會拆浮點數了^^資料封裝這些東西都有RFC可以看,可以參考RFC4506
板上太多高手了 我有看了一下union應該也是一種方法但小弟我昨天還有找到一個叫snprintf的函式 它也可以將浮點數直接格式化成字串 不知道這樣會不會有什麼缺點
作者:
Caesar08 (Caesar)
2016-02-25 19:41:00作者:
qscgy4 (有點厲害)
2016-02-25 19:56:00sorry, 小弟不才,受教了,沒用過union這個方法之前都是為了避免 MUC與電腦的變數大小不同才這樣做回 Caesar08 轉字串可以,但比較沒效率,浪費空間還有時間
作者:
Caesar08 (Caesar)
2016-02-25 20:19:00qscgy4,但他的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
用union的話會不會有byte order的問題?雖然我沒確認過會不會在這發生,但多留意一下為妙
作者:
k1400 (德州家康)
2016-02-26 08:42:00不懂可不可以不要出來嘴?
原PO也沒說Buffer是序列還是並列,不知道大家在吵什麼如果是8個腳位的並列Buffer,那實作方式還是有差別的以感測器的規格跟Sample為準吧,原廠應該都有資料沒有原廠的資料來問,誰會知道感測器原廠的晶片怎寫的