将C#的元数据构造为一个字节[]

问题描述

是否有一种方法可以将用[StructLayout]注释的C#结构序列化为托管字节数组,即i。 e。 byte[],是预制的还是配制成的?

我可以看到先将邮件编组到非托管内存,然后再进行复制,但这很丑陋。

解决方法

根据我的经验,将托管数据和非托管数据混合在一起是为了明确定义从一个空间到另一个空间的过渡。

当我有从本地到托管或其他方式的需求时,第一步始终是将数据复制到“目标”空间然后转发。

由于您提到复制和[StructLayout],因此我假设您已经熟悉互操作服务。

https://docs.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.marshal.ptrtostructure?view=netcore-3.1#System_Runtime_InteropServices_Marshal_PtrToStructure_System_IntPtr_System_Object _

如果您找到更好的方法,请告诉

,

结帐MemoryMarshal.Cast<TFrom,TTo>()。它可以轻松地使您从字节/短/整数/长数组更改为结构,然后再返回。

https://docs.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.memorymarshal?view=netcore-3.1