2017-08-30 13 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)向更广泛的社区表明问题已解决。 –