我们正在构建一个字节缓冲区,以便将.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)在这个例子中,它的顺序相反,但我有其他的例子,调试器中显示的顺序以不同的方式加扰。
如果我更进一步检查网络上的实际输出,使用网络嗅探器,它似乎是我指定的正确顺序,所以调试器似乎是问题,但我想看看它正确。 BTW我做在调试器选项中设置了“在变量窗口中显示对象的原始结构”。 提前致谢!
答案 0 :(得分:2)
调试器按字母顺序向您显示成员。
在调试大型结构时,通常会更方便。
答案 1 :(得分:1)
当然看起来它按字母顺序排列......
如果网络嗅探器正确显示,那么调试器很可能只是试图通过按字母顺序放置变量名来“帮助”您,这样您就可以更容易地找到它们。