DOBON.NET DOBON.NETプログラミング掲示板過去ログ

StructLayoutの使用方法について

環境/言語:[XP、C#、.NET Framwork2.0]
分類:[.NET]

お世話になっております。

ソケット通信でデータのやり取りを行うアプリケーションを作成しています。
送信するデータをクラスで定義し、変数を1つづつByteに変換し、それをつなげて相手
側に送信していたのですが、8byteアラインメントで定義して送信する必要がありました。
(受信の場合は上記の逆をしてデータを取得していました)

そこで下記のように「StructLayout(LayoutKind.Sequential,Pack=4)」をクラスの前に
定義したのですが、パディングが入った状態でデータをまとめて送信&受信する方法がわ
かりません。。。

どうすれば、データをまとめて送受信できるのでしょうか?
それとも、クラスではStructLayout使えないのでしょうか?

アドバイス、ご教授お願い致します。

---------------
    [StructLayout(LayoutKind.Sequential, Pack = 4)]
    public class TEST
        {
            private bool _testBool;
            private double _testDouble;

            public bool testBool
            {
                get { return _testBool}
                set { _testBool= value; }
            }

            public double testDouble
            {
                get { return _testDouble; }
                set { _testDouble = value; }
            }
        }
バイトアラインに頼ったコーディングは危険ですが。
それくらいの構造体ならともかく、bool を何バイトとして扱うのかとかの問題もあるし。
ですので、できることなら手できっちり計りながら byte 配列に落としていくことをお勧めします。
BitConverter クラスの名も挙げておきましょう。

で、.NET でバイトアラインを扱う場合。
struct なら unsafe でごにょごにょすれば多少簡単ですが、class だとアンセーフポインタにできないので Marshal クラス使ってあれこれすればできないこともないです。


// 8バイトアラインなのになぜ Pack=4 なんでしょ?
返信ありがとうございます。


> で、.NET でバイトアラインを扱う場合。
> struct なら unsafe でごにょごにょすれば多少簡単ですが、class だとアンセーフポインタにできないので Marshal クラス使ってあれこれすればできないこともないです。
ありがとうございます。Marshalクラスを調べていろいろいじってみます。


> // 8バイトアラインなのになぜ Pack=4 なんでしょ?
すみません。書き間違えました。Pack=8です。


また、質問するかもしれないですが、そのときは宜しくお願いします。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板