c# - 将 Stream 数据映射到 C# 中的数据结构

标签 c# c++ data-structures

有没有办法将在流或数组上收集的数据映射到数据结构,反之亦然? 在 C++ 中,这只是将指向流的指针转换为我想要使用的数据类型的问题(反之亦然) 例如:在 C++ 中

Mystruct * pMyStrct = (Mystruct*)&SomeDataStream;
pMyStrct->Item1 = 25;

int iReadData = pMyStrct->Item2;

显然,C++ 方式是相当不安全的,除非您在读取传入数据时确定流数据的质量,但对于传出数据来说非常快速和容易。

最佳答案

大多数人使用.NET序列化(有更快的二进制和更慢的XML格式化程序,它们都依赖于反射并且在一定程度上具有版本容错性)

但是,如果您想要最快(不安全)的方式 - 为什么不呢:

写作:

YourStruct o = new YourStruct();
byte[] buffer = new byte[Marshal.SizeOf(typeof(YourStruct))];
GCHandle handle = GCHandle.Alloc(buffer, GCHandleType.Pinned);
Marshal.StructureToPtr(o, handle.AddrOfPinnedObject(), false);
handle.Free();

阅读:

handle = GCHandle.Alloc(buffer, GCHandleType.Pinned);
o = (YourStruct)Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(YourStruct));
handle.Free();

关于c# - 将 Stream 数据映射到 C# 中的数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2256/

相关文章:

c# - 是否可以将 vb6 "Val()"转换为 c#?

C++ 包括用于 size_t 的 linux/types.h

algorithm - 如果有大量照片,图像文件夹的结构有多重要?

c++ - 10G这样的大数据文件如何处理?

c++ - 非阻塞 io_service::run

data-structures - 指针和对象的实现

c# - 检查xls文件不存在

c# - C# OOPS 静态类和单例类之间的区别

c# - .NET 中 IClonable 接口(interface)的用途是什么?

c++ - 使用Qt模拟gps数据以与traccar一起使用