1

我有一个包含二进制数据的文件,其格式与此结构匹配:

struct MyStruct {
    UInt32 count;
    UInt32[] items;
}

二进制数据可以是任意长度,因为可以有任意数量的项目,但项目的数量是在 count 中定义的。使用Marshal.PtrToStructure似乎不允许这种二进制格式,其中有可变数量的项目?使用属性可以设置项目数组的大小,但这必须是一个常量,有没有办法告诉它在count读取数据时查看?

我想过用XML定义格式,并用我自己的代码用它来读入结构,但这会是很多重复的数据,如果文件格式改变了,我必须改变XML和结构,而不仅仅是结构。

而且我考虑过在items字段上使用自定义属性,并编写自己的代码来读取数据,但是为了枚举结构的字段,我必须使用反射?哪个慢?

(我也可以自己手动阅读,但我已经为这个问题修剪了结构,并且如果结构发生变化,我希望不必更改阅读代码)

4

1 回答 1

0

.Read()在 的实例上使用方法Stream,读入 a byte[],然后使用System.BitConverter.ToUInt32(bytearray, startindex)将二进制数据转换为uint32形式。

于 2013-04-20T19:46:24.470 回答