1

重複の可能性:
C#で構造をバイト配列に変換する方法は?

だから私はC++から来ており、構造体/クラスを配列に変換したり、その逆を行ったりするのは簡単で簡単でした。私はC#と.Netフレームワークが大好きですが、このようなことを実行するのは非常に困難で不快であることに気づきました。

だから私はフロートのある構造体を持っています。それらをバイト配列に転送する必要があります。現在、クラス内で構造体を「ラップ」しており、プロパティを介してメンバーを公開しています。しかし、この構造体を配列にコピーするのは難しいことがわかりました。C#の「安全でない」コードとポインターは一般的に大したことではないので避けるべきですが、これを行うことは悪いプログラミング慣行と見なされますか?

public class LevelOfDetail {
    private LODDataStruct data;

    public float Scale {
        get {
            return data.Scale;
        }
        set {
            data.Scale = value;
        }
    }

    public float Brightness {
        get {
            return data.Brightness;
        }
        set {
            data.Brightness = value;
        }
    }

    public float Sway {
        get {
            return data.Sway;
        }
        set {
            data.Sway = value;
        }
    }

    public float Detail {
        get {
            return data.Detail;
        }
        set {
            data.Detail = value;
        }
    }

    public float Distance {
        get {
            return data.Distance;
        }
        set {
            data.Distance = value;
        }
    }

    public unsafe void CopyTo(void* dest) {
        *((LODDataStruct*)dest) = data;
    }

    public unsafe void CopyFrom(void* src) {
        data = *((LODDataStruct*)src);
    }

    private struct LODDataStruct {
        public float Scale;
        public float Brightness;
        public float Sway;
        public float Detail;
        public float Distance;
    };
};

これを行うにはこれは悪い方法ですか?コピーするのに1行のコードが必要であり、各フロートから個々のバイトを取得して1つずつコピーするよりも少し速いかもしれないので、私はそれが好きです。

これを行うためのより良い方法はありますか?

4

0 に答える 0