我有一个包含二进制数据的文件,其格式与此结构匹配:
struct MyStruct {
UInt32 count;
UInt32[] items;
}
二进制数据可以是任意长度,因为可以有任意数量的项目,但项目的数量是在 count 中定义的。使用Marshal.PtrToStructure
似乎不允许这种二进制格式,其中有可变数量的项目?使用属性可以设置项目数组的大小,但这必须是一个常量,有没有办法告诉它在count
读取数据时查看?
我想过用XML定义格式,并用我自己的代码用它来读入结构,但这会是很多重复的数据,如果文件格式改变了,我必须改变XML和结构,而不仅仅是结构。
而且我考虑过在items
字段上使用自定义属性,并编写自己的代码来读取数据,但是为了枚举结构的字段,我必须使用反射?哪个慢?
(我也可以自己手动阅读,但我已经为这个问题修剪了结构,并且如果结构发生变化,我希望不必更改阅读代码)