从vc++到matlab的无符号短矢量套接字



我想使用套接字通信将visual c++中的无符号短向量发送到matlab。

我有一个无符号短矢量std::具有的矢量测试

//test[0]-test[3]  short values comverted from longlong (64bits/16bits=4 elements)    
//test[4]-         short values.    

现在我想把这个向量插入到matlab中。

在VC++中,

send(socket, (char *) &test[0], test.size()* sizeof(unsigned short), 0);  

在matlab m文件中,我尝试了

//t=tcpip(----);    
//fread(t, 4, 'uint64');    
//fread(t, the rest of bytes, 'ushort');    

但我在matlab上得到的值看起来不对。

"fread(t, 4, 'uint64')" shows invalid precision and
"uint64(fread(t,4,'uint64'))" does also the same error.

我们如何在matlab上接收和转换数据?

提前感谢!

查看此页面上的信息http://www.mathworks.co.uk/help/techdoc/ref/fread.html当您将'int64'指定为fread时,似乎需要将64位数据读取到每个值中。因此,您的4个元素被读取为单个64位模式。我认为,如果您发送16位短整数,则需要使用与发送'uint16'数据类型相同的fread,然后将其"转换"为64位。没有转换,因为无符号短路的范围在64位整数的范围内。如果真的想按自己的方式读取64位整数值,我认为您需要将数据作为64位整数的数组发送到套接字发送函数中。这样,至少Matlab将从另一端的套接字中读取正确数量的字节。此时,您发送的每4个无符号短值都会通过其外观合并为一个64位整数。

最新更新