gpt4 book ai didi

c# - 像在 C 中一样在 C# 中使用 struct - 可以吗?

转载 作者:行者123 更新时间:2023-11-30 20:08:13 27 4
gpt4 key购买 nike

我正在读取特定格式的二进制文件,习惯于将数据 block 转换为结构,然后读取结构以从二进制数据文件中提取字段。

我正在尝试这样做,但在 C# 中失败了,它们看起来更像是类而不是 C 意义上的结构。有可能做我想做的事吗?例如..

public struct Datum {
byte type;
ushort payload;
}

public struct DiskPage {
ushort pageNumber;
Datum[] data = Datum[170];
}

我希望能够读取 512 字节的文件并将其转换为 DiskPage,然后能够从 DiskPage 结构中读取值。这在 c# 中是否可行 - 或者是否有另一种首选方法?我是否应该将该代码留在 C 中并将其链接进去?

谢谢!礼萨

最佳答案

默认情况下,编译器不尊重字段的顺序(它也可能移动字段并在内存中留下间隙 = Packing)。通过使用 StructLayout您可以强制执行不同的行为(默认、顺序或显式)。

使用MarshalAs对于字段上的特定选项。小心字节顺序。

[StructLayout(LayoutKind.Explicit, Size=16, CharSet=CharSet.Ansi)]
public struct MySystemTime
{
[FieldOffset(0)]public ushort wYear;
[FieldOffset(2)]public ushort wMonth;
[FieldOffset(4)]public ushort wDayOfWeek;
[FieldOffset(6)]public ushort wDay;
[FieldOffset(8)]public ushort wHour;
[FieldOffset(10)]public ushort wMinute;
[FieldOffset(12)]public ushort wSecond;
[FieldOffset(14)]public ushort wMilliseconds;
}

关于c# - 像在 C 中一样在 C# 中使用 struct - 可以吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7301953/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com