gpt4 book ai didi

C#,从二进制文件中读取结构

转载 作者:太空狗 更新时间:2023-10-29 20:50:52 25 4
gpt4 key购买 nike

我想从二进制文件中读取结构。在 C++ 中,我会这样做:

stream.read((char*)&someStruct, sizeof(someStruct));

C#中有类似的方法吗? BinaryReader 仅适用于内置类型。在 .NET 4 中有一个 MemoryMappedViewAccessor。它提供了类似 Read<T> 的方法这似乎是我想要的,除了我必须手动跟踪我想阅读的文件中的位置。有没有更好的办法?

最佳答案

public static class StreamExtensions
{
public static T ReadStruct<T>(this Stream stream) where T : struct
{
var sz = Marshal.SizeOf(typeof(T));
var buffer = new byte[sz];
stream.Read(buffer, 0, sz);
var pinnedBuffer = GCHandle.Alloc(buffer, GCHandleType.Pinned);
var structure = (T) Marshal.PtrToStructure(
pinnedBuffer.AddrOfPinnedObject(), typeof(T));
pinnedBuffer.Free();
return structure;
}
}

您需要确保使用 [StructLayout] 和可能的 [FieldOffset] 注释声明您的结构,以匹配文件中的二进制布局

编辑:

用法:

SomeStruct s = stream.ReadStruct<SomeStruct>();

关于C#,从二进制文件中读取结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4159184/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com