结构体 C# 的大小
本文关键字:结构体 | 更新日期: 2023-09-27 18:36:59
我是C#的新手。
我试图理解为什么结构大小会增长。
即:
struct Test
{
float x;
int y;
char z;
}
Test 结构的大小实际上是 10 个字节(float=4、int=4、char=2)。
但是当我尝试使用Marshal.SizeOf(..)
方法获取结构的大小时,我得到了 12。
C++,我做了pragma pack(1)
来防止这种情况,但我如何在 C# 中做到这一点?
另一个问题:
当我尝试将 Test 结构转换为字节数组时,如果结构不是[Serialize]
我得到了大小为 12 字节的字节数组,但(或不是)例外,但如果结构[Serialize]
我得到了大小为 170 字节的字节数组,为什么会这样?
谢谢!:)
[StructLayout(LayoutKind.Sequential, Pack = 1)]
struct TestStruct
{
float x;
int y;
char z;
}
会给出一个Marshal.SizeOf() == 9
,因为Marshal.SizeOf(typeof(char)) == 1
出于奇怪的历史原因。
但
[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Unicode)]
有了这个,你会得到Marshal.SizeOf() == 10