将二进制数据读入c#结构

时间:2013-04-20 18:21:24

标签: c# struct binary-data

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

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

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

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

我想过在items字段上使用自定义属性,并编写自己的代码来读取数据,但为了枚举结构的字段,我必须使用Reflection?这很慢?

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

1 个答案:

答案 0 :(得分:0)

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