2011-07-29 21 views
2

私は、プログラムの周りにネットワークメッセージを渡すために、(LayoutKind.Explicit属性を使って)擬似共用体としてC#構造体を使用しています。私はプリミティブ型でレイアウトを使う方法を理解しています。なぜなら、それはサイズが分かっているからです。配列を含む構造体のサイズ

ただし、フィールドの1つを文字配列にするとどうすればよいですか?私は、charがデータの2バイト(Unicode形式の場合)ですが、char []の大きさはどれくらいか分かりますか?これは参照型であると信じて正しいですから、そのサイズは単なるアイテム数* 2ではありませんか?

どうすればこの構造体をレイアウトできますか?それも可能ですか?

答えて

4

サイズは参照の幅です。 x86では4バイト、x64では8バイトです。 配列のサイズは、配列がヒープ上に別々に格納されるため、無関係です。 のデータをバイトストリームにシリアル化したい場合は、のデータにの符号化を使用するかどうかによって異なります。 UTF16は実際に2 *文字数になりますが、UTF8またはUTF32は異なるでしょう。

+0

ありがとう、私の考えを確認しました。参照サイズはコンパイルされた設定に依存しますが、実行されるシステムではありません。したがって、64ビットOS上で実行されている場合でも、32ビットアセンブリには4バイトの参照サイズがありますか? – Venatu

+0

@Venatuランタイム、コンパイル時ではありません。したがって、OSに依存します。 –

0

これは長さと文字あたりのバイト数を掛け合わせてはいけませんか?

+1

文字列のバイト数は、.NETの 'char'が明示的にUTF-16であるため、2になりますが、CDNは特定のCPUを対象とします(可能であれば)。 –

関連する問題