0

我们正在构建一个字节缓冲区,以通过 .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)在这个例子中,它是相反的顺序,但我还有其他例子,调试器中的显示顺序以不同的方式加扰。

如果我更进一步并使用网络嗅探器检查网络上的实际输出,它似乎是我指定的正确顺序,所以调试器似乎是问题,但我想正确地看到它。顺便说一句,我确实在调试器选项中设置了“在变量窗口中显示对象的原始结构”。提前致谢!

4

2 回答 2

2

调试器按字母顺序向您显示成员。

在调试包含大量内容的大型结构时,这通常更方便。

于 2013-02-01T15:05:34.840 回答
1

当然看起来它是按字母顺序排列的......

如果网络嗅探器正确显示它,那么调试器很可能只是试图通过按字母顺序排列变量名称来“帮助”您,以便您可以更轻松地找到它们。

于 2013-02-01T15:05:15.627 回答