我们正在构建一个字节缓冲区,以通过 .Net Socket Send()方法发送到某些工厂设备,因此字节顺序很重要。但我注意到,即使我使用“[StructLayout( LayoutKind.Sequential ”,Visual Studio 2010 调试器显示的序列与我指定的序列不同。例如,
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public class K_NEWFILEGET_START
{
public K_HEADER Header = new K_HEADER();
[System.Runtime.InteropServices.MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
public byte[] fileName = new byte[32];
public globals.INT2_Type crc = new globals.INT2_Type();
}
然后我做一个
K_NEWFILEGET_START msg = new K_NEWFILEGET_START();
在调试器中显示 . . .
- msg {xxxxx.yyy.K_NEWFILEGET_START}
+ crc {xxxxx.globals.INT2_Type}
+ fileName {byte[32]}
+ Header {xxxxx.yyy.K_HEADER}
(专有的东西 xxx'ed out)在这个例子中,它是相反的顺序,但我还有其他例子,调试器中的显示顺序以不同的方式加扰。
如果我更进一步并使用网络嗅探器检查网络上的实际输出,它似乎是我指定的正确顺序,所以调试器似乎是问题,但我想正确地看到它。顺便说一句,我确实在调试器选项中设置了“在变量窗口中显示对象的原始结构”。提前致谢!