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