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修饰
------解决方案--------------------
还是没有看明白。
先顶。
------解决方案--------------------
楼主表达清楚点啊。。