C代码截断为7位最大值

时间:2017-08-30 17:27:17

标签: c matlab casting

我有一些代码,我正在尝试用于网络通信,以便将信息从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_MLT

在我的接收端,我期待收到int8,然后我将其作为uint8进行类型转换。因此,对于每个接收到的字节,我希望0-255为值。

我注意到一些差异,我在接收端收到了很多127,并通过做一些基本的调试发现,对于我从128-255发送的每个值,我的接收代码(在pnet接收呼叫后立即)显示127。

因此,我相信pnet.c文件中可能存在错误,导致值截断为7位最大值,而不是显示完整的uint8范围。

关于为什么会发生这种情况的任何想法?我主要是一个matlab用户,并且不会花太多时间在数据类型转换上,所以我觉得我的深度有点偏差。

接收返回错误/有趣错误字符的代码:

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

1 个答案:

答案 0 :(得分:1)

我弄清楚这里发生了什么。事实证明,如果使用UDP套接字(Java / MATLAB UDP实现强制转换int8)在MATLAB中接收大于127的值,并且没有指定您希望接收的数据类型,MATLAB将假设一些非描述错误字符。如果您进一步尝试对该错误字符进行类型转换,它将限制为该类型可能的最高值。

在我的情况下,因为我正确地获得了一些数据,我没有意识到我没有正确地指示MATLAB作为uint8接收。因此,它正确地接收0-127,但给我128-255的错误字符。然后我尝试将该错误字符转换为多种类型,并发现每次转换时它都显示为该特定类型的最大值。

修复只需要在套接字接收调用中添加'uint8'选项。

固定代码:

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