如何防止MatlabUDP/fread将原始字节数据转换为双字节数据
我正在尝试从UDP读取编码的原始数据,并将其传递到自定义MEX文件进行解码。现在,当我使用如何防止MatlabUDP/fread将原始字节数据转换为双字节数据,matlab,udp,Matlab,Udp,我正在尝试从UDP读取编码的原始数据,并将其传递到自定义MEX文件进行解码。现在,当我使用fread从UDP端口读取数据时,我得到的是双倍。另外,的文档告诉我们 默认情况下,数值以双精度数组返回 但是,它没有告诉我如何防止这种转换,以及如何取而代之地获取原始字节值。我不使用浮点值,必须在我的MEX文件中重新转换,这将导致不必要的开销 编辑: 根据要求,这里有一个小例子 u = udp(); u.LocalPort = 3333; fopen( u ); data = fread( u, 10,
fread
从UDP端口读取数据时,我得到的是双倍。另外,的文档告诉我们
默认情况下,数值以双精度数组返回
但是,它没有告诉我如何防止这种转换,以及如何取而代之地获取原始字节值。我不使用浮点值,必须在我的MEX文件中重新转换,这将导致不必要的开销
编辑:
根据要求,这里有一个小例子
u = udp();
u.LocalPort = 3333;
fopen( u );
data = fread( u, 10, 'uint8' );
fclose( u );
假设您通过以下小Python脚本发送:
导入时间
导入套接字
UDP_IP=“127.0.0.1”
UDP_端口=3333
MESSAGE=“你好,世界!”
sock=socket.socket(socket.AF_INET,socket.sock_DGRAM)
尽管如此:
发送到(字节(消息,“utf-8”),(UDP_IP,UDP_端口))
时间。睡眠(.100)
正如udp/fread的文档所述,它将输入视为uint8
,并返回双倍。然而,与之相反,UDP版本似乎不理解指定输出类型的*
或=>
语法
顺便说一句:我使用的是R2017b,也许这也会有所不同。您可以使用
的“精度”
输入,用于fread
():
所以你应该能够使用
A = fread( fid, 2, '*int16' ); % Use correct size instead of 2 depending on your type
我想你的意思是
'*uint8'
,对吗?这也是我尝试过的,但是我得到了一个错误,所以我认为我误解了文档:错误使用udp/fread(第212行)指定的无效精度。有关详细信息,请键入“instrhelp fread”。readFrames(第23行)data=fread(u,u.bytesavable,'*uint8')中的错误无论您想要什么数据类型,我都选择了一个任意示例。。。如果没有答案,很难说出你为什么会出错。如果指定的是1
而不是u.BytesAvailable
,该怎么办?如果你强制它是uint8
,那么它应该只有1个字节。有趣的是,我刚刚意识到,SIZE
参数似乎被忽略了。相反,无论我指定了什么,它似乎都读取了一个完整的数据报。顺便说一句,您在帖子中链接的文档是指fread
的文件版本。我说的是,有人能详细解释一下为什么这项议案被否决吗?
A = fread( fid, 2, '*int16' ); % Use correct size instead of 2 depending on your type