我是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字节的数组,为什么会发生?
谢谢! :)
答案 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)]