struct C#的大小

时间:2016-03-01 07:26:31

标签: c# struct

我是C#的新人 我试图理解结构大小增长的原因 即:

struct Test
{
    float x;
    int y;
    char z;
}

Test结构的大小实际上是10个字节(float = 4,int = 4,char = 2)。
但是当我试图用Marshal.SizeOf(..)方法获得sizeof结构时,我得到了12 在C ++中,我做了pragma pack(1)以防止这种情况,但我怎样才能在C#中做到这一点?
另一个问题:
当我试图将Test结构转换为字节数组时,如果结构不是[Serialize],我得到大小为12字节的字节数组为例外(或不是),但如果结构是[Serialize]我得到了字节大小为170字节的数组,为什么会发生? 谢谢! :)

1 个答案:

答案 0 :(得分:9)

View v = LayoutInflater.from(context).inflate(R.layout.viewpager_item, container, false);
由于奇怪的历史原因,

会提供[StructLayout(LayoutKind.Sequential, Pack = 1)] struct TestStruct { float x; int y; char z; } ,因为Marshal.SizeOf() == 9

BUT

Marshal.SizeOf(typeof(char)) == 1

有了这个,您将获得[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Unicode)]