2013-04-10 91 views
0

在Matlab浮點我想通過串行COM發送一個浮點數到Matlab和它解釋爲單精度浮點數。接收來自字節

我可以通過串口作爲字節的數據包發送數據。因此,在發送端

我轉向32位由8浮點數,掩蓋它,並把它

(byte)((number >> 8) & 0x000000FF) 
(byte)((number >> 16) & 0x000000FF) 
... 
\r\n (line termination) 

現在,Matlab的我連接到COM,並通過使用fscanf(s,'%f')其中s是串行實例接收。它讀取字節直到終止線。現在

,問題是,MATLAB的輸出還不如我發出同樣的。我相信問題是不同的浮點表示法還是不同的發送順序。

例如。如果我發送十進制1.2 (0x3f99999a),Matlab打印1.5315e+010

我能做什麼錯?

編輯:

Matlab的的fscanf http://www.mathworks.co.uk/help/matlab/ref/fscanf.html

+0

發送者的代碼破壞了,從而不好笑。你爲什麼移動四位? 'number'從哪裏來的,你甚至不能用浮點運算符>>?是什麼讓你認爲你可以使用'fscanf'作爲二進制數據?當其中一個數據字節碰巧是'\ r'或'\ n'時會發生什麼? – 2013-04-10 20:53:26

+0

@Ben Voigt對不起。我的意思是轉移8位。創建線程時出現錯字。當Matlab收到\ r或\ n時,Matlab自行終止讀取。 Number是C中的一個浮點數。我已經添加了指向可以接收和格式化二進制數據的matlab函數的鏈接。 – 2013-04-10 20:55:02

回答

1

默認情況下,number是類型雙它是64位的。您應該執行64位而不是32位的轉換。否則,您可以將該數字聲明爲uint32類型並執行32位移位。

1

嘗試fread代替fscanf,當數據是二進制的。