结构体 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 字节的字节数组,为什么会这样?
谢谢!:)

结构体 C# 的大小

[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