日期:2014-05-18  浏览次数:20965 次

C# 结构体输出值的问题?
是这样 我作Sockets 通信 客户端 往我这边发数据 我要用WSN服务 结构体接受
struct wsn_sensor {
byte stx;  
  byte sid;  
  byte chn;
  sr type;
  uint sensor;
  byte alarm;
  short reserved;
  byte etx;  

}在网上看到 用这个代码可以转换
  public object ByteArrayToStructure( byte[] bytearray , ref object obj , int startoffset ) 
  {  
  int len = Marshal.SizeOf(obj);  
  IntPtr i = Marshal.AllocHGlobal(len); // 从结构体指针构造结构体  
  obj = Marshal.PtrToStructure(i, obj.GetType());  
  try {  
  // 将字节数组复制到结构体指针  
  Marshal.Copy(bytearray, startoffset, i, len);  
  }  
  catch (Exception ex) 
  { 
  Console.WriteLine("ByteArrayToStructure FAIL: error " + ex.ToString());
  }
  object obz = Marshal.PtrToStructure( i , obj.GetType( ) );
  Marshal.FreeHGlobal(i); 
  //释放内存,与 AllocHGlobal() 对应  
  return obz;
  }

然后
  wsn_sensor Wsn16 = new wsn_sensor( );
  object structType = Wsn16;
  Wsn16=(wsn_sensor)ByteArrayToStructure( data , ref structType , 0 );
我想知道 怎么输出Wsn16 里的数据??? 求答案

------解决方案--------------------
PtrToStructure不就是转为结构体吗,将你的数据流转为struct
(wsn_sensor)obj
------解决方案--------------------
不明白楼主想问什么
Console.Write("Wsn16.stx:{0}", Wsn16.stx);
Console.Write("Wsn16.sid:{0}", Wsn16.sid);
......
这样??

另外你的wsn_sensor结构定义有问题
[StructLayout(LayoutKind.Sequential, Pack = 1)]这句不要漏了,还有为结构及其成员加上public修饰
------解决方案--------------------
还是没有看明白。
先顶。
------解决方案--------------------
楼主表达清楚点啊。。