2017-12-29 41 views
0

Matlabクライアントからサーバーに異種データを送受信する必要があります。データには、32ビットの整数と64ビットのIEEE浮動小数点数が含まれます。 TCP/IPは文字だけを理解することを覚えているので、このデータを連続した配列にまとめる必要があります。その後、応答を受け取った後、着信文字配列からバイトデータを抽出し、それをMatlab型に変換する必要があります。誰にどのようにこれを行うには考えがありますか?TCP/IP上の異種データ

+0

"TCP/IPは文字のみを理解しています..." - そうではありません。 TCP/IP(実際にはここではTCPについてのみ話しています)は、任意のビットを送信します。エンコーディング(時には「文字」)は1ビットではありません。バイト配列にデータをパックして、それをTCPソケットに書き込めるなら、うまくいくでしょう。どのように物が梱包され、解凍されるか(シリアル化/非直列化)のためのプロトコルが必要なように聞こえます。データをシリアライズするために使用できるライブラリには、多くの形式があります。いくつか例を挙げると:gRPC、MessagePack、BSON、Protobuf、Thrift、XML、JSON ...リストが続きます。 – marklap

+0

私は反対する必要があります。 TCP RFCから:「TCPは、インターネットシステムを介して送信するために、いくつかのオクテットをセグメントにパッケージ化することによって、ユーザー間で各方向にオクテットの連続ストリームを転送することができます。したがって、TCPは、x86アーキテクチャの場合、データがオクテットまたはバイト(または文字)の配列になると想定しています。 CやForthのような言語では、IEEEの実際の64ビット(またはForthの80ビット)を文字の配列にアセンブル(またはシリアライズまたは多重化)するのは簡単です。しかし、Matlabではそうではありません。私は自分のアプリケーションに合った簡潔で信頼できる方法を作りました。 – AeroGuy

+0

オクテットとバイトは同じです。しかし、文字はそうではありません。文字は特定の順序と方法で配列された、つまりエンコードされたバイトです。 TCPはエンコーディングの何も気にしません。これは、エンコードされたバイトなどを配信するだけです。 – marklap

答えて

0

バイトまたは文字のストリームに異種データを回すための一般的な用語は、(及び逆、デシリアライズ)をシリアライズあります。

データをテキスト文字にシリアル化するために広く使用される2つの形式は、およびJSONです。

これらの用語のいずれかをMathworksサイトで検索するか、このサイトで[matlab]と一緒に検索すると、豊富なライブラリとコード例が見つかります。

またはR2016b以降、MATLABには実際にJSONにシリアル化/デシリアライズするための組み込み関数があります。jsonencodejsondecodeです。

関連する問題