我正在使用C#和visual studio 2012。
我有一个程序,它接收来自tcp socket的数据的c ++结构。在c ++程序中,此结构以字节数组进行序列化,打包和发送。
c ++结构有继承,所以在第一步我认为使用c#类应该更好,用BitConverter.ToSomething
读取数据但问题是c ++填充,我知道visual c ++对齐是8字节,所以知道数据的类型和顺序我可以任意跳转填充,但我试图以更自动的模式执行此操作(更容易的用户维护,如果更改结构,则不再计算)。
然后,我认为正确的方法是将c#类更改为结构和重复数据字段,因此问题是:无论填充是什么,无论如何将[] byte复制到struct?我看到了关于如何复制到struct的不同示例,但是在所有这些示例中,字段偏移和字段大小是任意定义的,具有完美对齐。
即:
我收到80个字节,76是我真正的结构大小,所以4个字节填充到内存对齐,但我希望编译器填充c#struct知道如果我接收一个整数并且之后是一个double(i知道字段的顺序和大小),然后有4个额外的字节放在哪里,它们不被读取。就像在c ++中使用指向数据的指针一样。