【发布时间】:2020-09-02 08:22:38
【问题描述】:
想要这样做: (编辑:错误的示例代码,忽略并跳过下面)
struct RECORD {
char[] name = new char[16];
int dt1;
}
struct BLOCK {
char[] version = new char[4];
int field1;
int field2;
RECORD[] records = new RECORD[15];
char[] filler1 = new char[24];
}
但无法在 struct 中声明数组大小,我该如何重新配置?
编辑:布局的原因是我使用 BinaryReader 来读取用 C 结构编写的文件。使用 BinaryReader 和 C# struct union (FieldOffset(0)),我想将标头加载为字节数组,然后按照最初的预期读取它。
[StructLayout(LayoutKind.Sequential)]
unsafe struct headerLayout
{
[FieldOffset(0)]
char[] version = new char[4];
int fileOsn;
int fileDsn;
// and other fields, some with arrays of simple types
}
[StructLayout(LayoutKind.Explicit)]
struct headerUnion // 2048 bytes in header
{
[FieldOffset(0)]
public byte[] headerBytes; // for BinaryReader
[FieldOffset(0)]
public headerLayout header; // for field recognition
}
【问题讨论】:
-
@Joren,为什么不将其添加为答案?
-
你知道 C#
char是 2 个字节,而 Cchar通常是 1 个字节,对吧? -
是的,我遇到了,在声明中添加了 Pack=1。好电话!
-
@RobertKerr 我认为
Pack=1不会解决这个问题。 Pack 影响字段之间的填充,而不是 char 的大小。
标签: c#