0

以下の質問をしなければなりません。

次の XDR メッセージを送信する必要があります。

struct Responde{
 float numbers<>;
 bool end;
}

配列 (xdr_array) とブール値 (xdr_bool) をエンコードする方法は知っていますが、どうすればよいですか:

1) 構造体をエンコードしますか? 2) 構造体をソケット経由で送信しますか?

おかげさまで、私は XDR を知らず、使用しなければなりません。再度、感謝します。

注: タイトルが示す方法 C 言語と Linux 環境について言及しています。

4

1 に答える 1

0

もちろん、最も柔軟なソリューションは、rpcgenツールを使用して XDR 定義を C コードにコンパイルし、それをコンパイルして C アプリケーションで使用することです。ただし、この依存関係をプロジェクトに導入したくない場合は、もちろんシリアル化コードを手動で記述できます。

RFC 1831 では、そのような構造がどのようにシリアル化されるかについて詳細に説明されていますが、例について知っておく必要があることは次のとおりです。

  • XDR のすべての数値は、ビッグ エンディアンの順序でエンコードされます。
  • 構造体のすべてのフィールドは 4 バイトに整列され、フィールドは宣言された順序で連結されます。
  • Afloatは、数値を 32 ビット浮動小数点数としてエンコードします。
  • 浮動小数点数の可変長配列は、要素数とそれに続く浮動小数点数を含む 32 ビット整数としてエンコードされます。
  • boolはブール値を 32 ビット整数としてエンコードします。ここで、真の値は数値としてエンコードされ、1偽の値は数値としてエンコードされます0

たとえば、構造体が 3 つの float と値 true で満たされている場合、次のバイト ストリームを取得します。

00 00 00 03  xx xx xx xx  yy yy yy yy  zz zz zz zz  00 00 00 01

xここで、yとのシーケンスはz浮動小数点数です。

于 2013-11-08T15:23:43.390 に答える