Eri*_*let 4 c# arrays byte struct casting
我想将 Color[] 保存到文件中。为此,我发现使用“System.IO.File.WriteAllBytes”将字节数组保存到文件应该非常有效。
我想以一种安全的方式将我的 Color[](结构数组)转换为字节数组:
如果可能,最好有一种通用的方法将字节数组转换为任何结构(T 结构)数组,反之亦然。
如果不可能,为什么?
谢谢,埃里克
我认为这两个解决方案制作了一个我想避免的副本,而且它们都使用 Marshal.PtrToStructure 特定于结构而不是结构数组:
从 .NET Core 2.1 开始,是的,我们可以!输入MemoryMarshal
。
我们会将我们的Color[]
视为ReadOnlySpan<Color>
. 我们将其重新解释为ReadOnlySpan<byte>
. 最后,由于WriteAllBytes
没有基于跨度的过载,我们使用 aFileStream
将跨度写入磁盘。
var byteSpan = MemoryMarshal.AsBytes(colorArray.AsSpan());
fileStream.Write(byteSpan);
Run Code Online (Sandbox Code Playgroud)
作为一个有趣的旁注,您还可以[StructLayout(LayoutKind.Explicit)]
在您的字段中尝试作为属性。它允许您指定重叠字段,有效地允许联合的概念。
这是 MSDN 上的一篇博客文章,说明了这一点。它显示了以下代码:
[StructLayout(LayoutKind.Explicit)]
public struct MyUnion
{
[FieldOffset(0)]
public UInt16 myInt;
[FieldOffset(0)]
public Byte byte1;
[FieldOffset(1)]
public Byte byte2;
}
Run Code Online (Sandbox Code Playgroud)
在此示例中,UInt16
字段与两个Byte
字段重叠。
这似乎与您尝试做的事情密切相关。除了Color
高效写入所有字节(尤其是多个对象)的部分之外,它让您非常接近。:)
归档时间: |
|
查看次数: |
7220 次 |
最近记录: |