将数组<byte>转换为托管CPP中的Struct </byte>

时间:2014-11-15 18:22:52

标签: arrays struct c++-cli managed

这必须是使用IP套接字时最常见的事情之一。您将数据作为数组获取,然后您可能需要将其转换为结构。

代码看起来像这样:

    array<Byte> ^ buffer = gcnew array<Byte>(2048);

while( nDataLen < 16 )
{
    nDataLen += m_Socket->Receive( buffer, 16-nDataLen, SocketFlags::None );
    m_Socket->Poll( 100000, SelectMode::SelectRead );
}

现在我需要接收刚刚收到的16字节并将它们转换为以下结构;

[StructLayout(LayoutKind::Explicit, Size=16, Pack=1,CharSet=CharSet::Ansi)]
public ref struct ResponseHeader
{
   public:

[FieldOffset(0)]    
UInt32  m_StartMessage;     // STRP

[FieldOffset(4)]    
Int32   m_MessageLength;    //  Total message length

[FieldOffset(8),MarshalAs(UnmanagedType::ByValTStr,SizeConst=6)]    
String ^    m_Status;       //  Message Status

[FieldOffset(14),MarshalAs(UnmanagedType::ByValTStr,SizeConst=2)]   
String ^    m_Reason;       //  Message Reason

};

我希望看到数组直接转换为struct但我不确定托管代码是否可行,本机cpp中简单。

如果没有办法摆脱这个,那么最好的方法是什么?

0 个答案:

没有答案