0

ソケット通信を使用して、Visual C++ の unsigned short vector を matlab に送信したいと考えています。

unsigned short vector std::vector テストがあります

//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-fileで、試しました

//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 でデータを受信して​​変換するにはどうすればよいですか?

前もって感謝します!

4

1 に答える 1

0

このページhttp://www.mathworks.co.uk/help/techdoc/ref/fread.htmlの情報を見ると、指定'int64'するfreadと、各値に64ビットのデータが読み込まれることが予想されるようです. したがって、4 つの要素は単一の 64 ビット パターンとして読み取られます。16 ビットの短整数を送信する場合は、送信するfreadのと同じデータ型を使用して'uint16'から、それらを 64 ビットに「変換」する必要があると思います。unsigned short の範囲が 64 ビット整数の範囲内にあるなどの変換はありません。あなたが本当にあなたのやり方でそれを行い、64 ビット整数値に読み込みたい場合は、データを 64 ビット整数の配列としてソケット送信関数に送信する必要があると思います。このようにして、少なくとも Matlab は相手側のソケットから正しいバイト数を読み取ります。現時点では、送信する 4 つの unsigned short 値はそれぞれ、一見すると 1 つの 64 ビット整数にマージされます。

于 2012-07-24T08:14:19.323 に答える