これは簡単ですが、わかりにくいです。私の質問は、私は構造体を持っていると私はパディングやメタデータのための追加のバイトなしでバイトストリームに変換する必要があります。私は構造体を持っていると仮定しシリアライゼーションやパディングなしでオブジェクトをバイト配列に変換する
[StructLayout(LayoutKind.Sequential)]
public struct MyStruct
{
public ushort a;
public uint b;
public uint c;
public ushort d;
}
備考:私はパディングが
を追加ありますようにを動作しません下記の溶液 を使用して、(プロジェクトが制約)1に、ここでパックを変更することはできませんint size = Marshal.SizeOf(typeof(T));
byte[] arr = new byte[size];
IntPtr ptr = Marshal.AllocHGlobal(size);
Marshal.StructureToPtr(str, ptr, true);
Marshal.Copy(ptr, arr, 0, size);
Marshal.FreeHGlobal(ptr);
備考:メタデータが追加されているため、バイナリ形式のシリアル化は使用できません。私は単に何をしたいすべての場合= 1、B = 2、C = 3、D = 4 GENERIC WAY
arr {byte[12]} byte[]
[0] 1 byte
[1] 0 byte
[2] 2 byte
[3] 0 byte
[4] 0 byte
[5] 0 byte
[6] 3 byte
[7] 0 byte
[8] 0 byte
[9] 0 byte
[10] 4 byte
[11] 0 byte
すべてのヘルプ
ようにバイナリ形式を取得するには?
「BitConverter」でその配列を手動で作成しようとしましたか? –
手作業でももちろん動作します私は何か一般的なものが必要です – tulipe
それに反射マジックを振りかけると(['GetFields'](https://stackoverflow.com/questions/8067493/if-getfields-doesnt-guarantee-order- how-does-layoutkind-sequential-work))それは非常に一般的です。 –