这是c++的类结构struct  _nwp_signal_t{
NWP_SERVER_t server; /*<保留字段,VWAS端不用填写*/
u_int32_t type; /*<信号源类型,从1开始*/
u_int32_t decode; /*<解码器类型*/
char ipaddr[NWP_ADDR_LEN]; /*<信号源地址*/
u_int16_t port; /*<信号源端口*/
u_int32_t datalen; /*<信号源长度*/
char data[0]; /*<由xml定义*/
}__attribute__((packed));
typedef struct _nwp_signal_t NWP_SIGNAL_t;
class Signal
{
public:
Signal(const NWP_SIGNAL_t *signal)

signal_ = reinterpret_cast<NWP_SIGNAL_t*>(new char[sizeof(NWP_SIGNAL_t) + signal->datalen]);
if(signal_)
{
memcpy(signal_,signal,sizeof(NWP_SIGNAL_t) + signal->datalen);
}
} Signal(const Signal &signal)

signal_ = reinterpret_cast<NWP_SIGNAL_t*>(new char[sizeof(NWP_SIGNAL_t) + signal.signal_->datalen]);
if(signal_)
{
memcpy(signal_,signal.signal_,sizeof(NWP_SIGNAL_t) + signal.signal_->datalen);
}
} ~Signal()
{
if(signal_)
{
delete[] reinterpret_cast<char*>(signal_);
}
}
private:
Signal()
{
}
private:
Signal& operator = (const Signal &signal)
{
(void)signal;
return (*this);
}
public:
u_int32_t ServerIP() const
{
u_int32_t ip;
if(host_atoul(signal_->server.ipaddr,ip))
{
return ip;
}
else
{
return 0;
}
}
u_int16_t ServerPort() const
{
return signal_->server.port;
}
u_int32_t Type() const
{
return signal_->type;
}
u_int32_t Decode() const
{
return signal_->decode;
}
u_int32_t IP() const

u_int32_t ip;
if(host_atoul(signal_->ipaddr,ip))
{
return ip;
}
else
{
return 0;

}
u_int16_t Port() const
{
return signal_->port;
}
u_int32_t DataLen() const
{
return signal_->datalen;
}
const char* Data() const
{
return signal_->data;
}
const char* IPStr() const
{
return signal_->ipaddr;
}
public:
void Fill(NWP_SIGNAL_t *signal) const
{
memcpy(signal,signal_,sizeof(NWP_SIGNAL_t) + signal_->datalen);
}private:
NWP_SIGNAL_t *signal_;};这个转成c#可以调的类结构[Serializable] // 指示可序列化
    [StructLayout(LayoutKind.Sequential, Pack = 1)] // 按1字节对齐
    public struct  NWP_SIGNAL_t{
        public NWP_SERVER_t server; /*<保留字段,VWAS端不用填写*/
        public uint type; /*<信号源类型,从1开始*/
        public uint decode; /*<解码器类型*/
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
        public char[] ipaddr; /*<信号源地址*/
        public UInt16 port; /*<信号源端口*/
        public uint datalen; /*<信号源长度*/
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0)]
        public char[] data; /*<由xml定义*/
    };
Class Signal
{
  ...........//需要转化的地方
}