将字节缓冲区内容复制到结构中

时间:2014-04-29 12:11:25

标签: c# c++ struct buffer

我正在尝试将缓冲区的内容复制到结构中。缓冲区包含从UDP recvfrom函数接收的数据。 在cpp中我使用memcpy函数完成它。我怎么能在C#中做到这一点? 我尝试使用Marshal函数,但有一些错误。 我的代码是:

                    sending_socket.SendTo(buff2, sending_end_point);

                    sh = sending_socket1.ReceiveFrom(navdata, ref remote);
                    int size = Marshal.SizeOf(typeof(navdata));
                    IntPtr ptr = Marshal.AllocHGlobal(size);
                    try
                    {
                                    Marshal.Copy(navdata, 0, ptr, size);
                                    Marshal.PtrToStructure(ptr, typeof(navdata1));
                    }
                   finally
                    {
                                      Marshal.FreeHGlobal(ptr);
                    }

结构名称为navdata1。 我已将缓冲区定义为:byte [] navdata = new byte [1024] 问候, shiksha

1 个答案:

答案 0 :(得分:0)

我无法从您提供的信息中确切地说出来,但您可能遇到“映射问题”。也就是说,你的'navdata'结构(你没有给出定义)遵循C#/ dot-NET约定的数据类型大小,对齐/位置等,这些不是实际发送的“在线” ”

在C ++中,您很幸运,您的编译器约定与实际数据格式相匹配(在C ++中,编译器/平台都有自己的约定,可以通过编译器选项,#pragmas等进行调整)。

如果确实如此,您可以逐项“手动”从缓冲区中提取数据。实际上,这就是你应该做的一般 - 尽管你可以为这些目的制作一些图书馆,让你的生活更轻松。

或者你可以使用C ++ / CLI,也许你会很幸运(再次)。