我想使用套接字通信将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位整数。