2017-08-30 24 views
-1

我有一些代碼,我試圖用於網絡通信從C++拉動信息到MATLAB。我正在使用來自Mathworks開放式交換機的pnet程序(來自c的mex文件):https://www.mathworks.com/matlabcentral/fileexchange/345-tcp-udp-ip-toolbox-2-0-6?s_tid=answers_rc2-2_p5_MLTC代碼截取到7位最大值

在我的接收端,我期待收到int8,然後我將它作爲uint8的類型轉換。因此,對於每個接收到的字節,我期望0-255作爲值。

我注意到一些差異,我在接收端收到很多127,並通過做一些基本調試發現,對於我從128-255發送的每個值,我的接收代碼(在pnet接收呼叫後立即發送)顯示127.

因此,我認爲pnet.c文件中的某些內容可能會導致值被截斷爲7位最大值,而不是顯示完整的uint8範圍。

有關爲什麼會發生這種情況的任何想法?我主要是一個matlab用戶,並沒有花太多時間在數據類型轉換上,所以我覺得這裏有一點我的深度。

接收代碼,返回壞/有趣的錯誤性質:

data = pnet('read',number of bytes to read,'noblock') 
+0

你怎麼知道它不會在發送端發生的呢? – 4386427

+2

向我們展示您的使用庫的MATLAB代碼。 –

+0

如果你把'int8 -1'轉換成'uint8',MATLAB是否像C一樣做並給你255或者它做了一些奇怪的截斷? –

回答

1

我想通了,發生了什麼事在這裏。事實證明,如果您使用UDP套接字(Java/MATLAB UDP實現強制轉換int8's)接收到的值大於127的MATLAB並且未指定您期望接收的數據類型,那麼MATLAB將假設一些非描述錯誤字符。如果您進一步嘗試對該錯誤字符進行類型轉換,它將被鉗制到該類型可能的最高值。

在我的情況下,因爲我正在收回一些數據,所以我沒有意識到我沒有正確地指示MATLAB接收uint8的數據。因此,它正確接收0-127,但給我的錯誤字符爲128-255。然後,我試圖將這個錯誤字符轉換爲多種類型,並發現對於每個類型,它顯示爲該特定類型的最大值。

修復只需要我添加一個'uint8'選項到我的套接字接收調用。

固定碼:

data = pnet('read',number of bytes,'uint8','noblock') 
+0

我很高興你找到了一個修復程序。那麼我會刪除我的答案。 – informaton

+0

在你的問題中添加代碼(不工作),並在你的答案(工作),這將有助於其他人也可能有這個問題。還想[接受這個答案](https://meta.stackexchange.com/q/5234/179419)向更廣泛的社區表明問題已解決。 –