【发布时间】:2015-09-11 18:22:14
【问题描述】:
我有一个struct abc,我想将字节复制到一个结构变量中。类似于 C/C++ 中的 memcpy。
我通过套接字接收字节,它们是同一 struct abc 变量的字节。
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct abc
{
public int a;
public int b;
public float c;
public char[] d; //30 size
}
【问题讨论】:
-
这基本上是一种脆弱的方法 - 例如,您依赖于两台机器的字节序相同。我怀疑你也需要 char 数组为
fixed。我会强烈建议不要使用这样的可变结构,并且绝对反对假设一台机器上的内存表示在另一台机器上是合适的。 -
看看
Marshal.PtrToStructure()和Marshal.StructureToPtr()方法 -
虽然直接复制字节更快,但在传输字节时考虑使用序列化/反序列化来保持数据一致性。
-
由于需要
fixed数组,如果不使用unsafe代码,您将无法执行此操作。您应该通过使用附加到输入缓冲区的MemoryStream流读取器来访问变量并将读取的数据分配给结构成员来解决此问题。即使那样,你也可能会遇到终结性问题。请参阅Jon's answer here 以获得解决方案。
标签: c# sockets struct byte memcpy