我正在尝试使用 C# 读取二进制数据。我拥有我想要阅读的文件中有关数据布局的所有信息。我能够“逐块”读取数据,即获取前 40 个字节的数据将其转换为字符串,然后获取接下来的 40 个字节。
由于数据至少有三个略有不同的版本,我想直接将数据读入一个结构。感觉比“逐行”阅读要正确得多。
我尝试了以下方法但无济于事:
StructType aStruct;
int count = Marshal.SizeOf(typeof(StructType));
byte[] readBuffer = new byte[count];
BinaryReader reader = new BinaryReader(stream);
readBuffer = reader.ReadBytes(count);
GCHandle handle = GCHandle.Alloc(readBuffer, GCHandleType.Pinned);
aStruct = (StructType) Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(StructType));
handle.Free();
该流是一个打开的 FileStream,我已经开始从中读取。使用时我得到一个AccessViolationExceptio
n Marshal.PtrToStructure
。
由于我对文件末尾的数据不感兴趣,因此该流包含的信息比我尝试读取的要多。
结构定义如下:
[StructLayout(LayoutKind.Explicit)]
struct StructType
{
[FieldOffset(0)]
public string FileDate;
[FieldOffset(8)]
public string FileTime;
[FieldOffset(16)]
public int Id1;
[FieldOffset(20)]
public string Id2;
}
示例代码从原始代码更改为使此问题更短。
如何将文件中的二进制数据读入结构?