我有一个包含二进制数据的文件,其格式与这个结构体匹配:
struct MyStruct {
UInt32 count;
UInt32[] items;
}
二进制数据可以是任意长度,因为可以有任意数量的项,但项的数量是在count中定义的。使用Marshal.PtrToStructure
似乎不允许这种二进制格式,其中有一个可变数量的项目?使用属性,你可以设置项目数组的大小,但这必须是一个常数,有没有办法告诉它在count
看,而它的读取数据?
我想过用XML定义格式,用它来用我自己的代码读入结构体,但这将是大量重复的数据,如果文件格式改变了,我将不得不改变XML和结构体,而不仅仅是结构体。
我想过在items
字段上使用自定义属性,并编写自己的代码来读取数据,但为了枚举结构体的字段,我必须使用反射?哪个慢?
(我也可以自己手动阅读,但我已经为问题修剪了结构,并且喜欢不必改变阅读代码,如果结构改变)
在Stream
实例上使用.Read()
方法,读入byte[]
,然后使用System.BitConverter.ToUInt32(bytearray, startindex)
将二进制数据转换为uint32
形式