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

本文关键字:结构体 二进制 数据 | 更新日期: 2023-09-27 18:10:05

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

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

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

我想过用XML定义格式,用它来用我自己的代码读入结构体,但这将是大量重复的数据,如果文件格式改变了,我将不得不改变XML和结构体,而不仅仅是结构体。

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

(我也可以自己手动阅读,但我已经为问题修剪了结构,并且喜欢不必改变阅读代码,如果结构改变)

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

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