我正在尝试将缓冲区的内容复制到结构中。缓冲区包含从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
答案 0 :(得分:0)
我无法从您提供的信息中确切地说出来,但您可能遇到“映射问题”。也就是说,你的'navdata'结构(你没有给出定义)遵循C#/ dot-NET约定的数据类型大小,对齐/位置等,这些不是实际发送的“在线” ”
在C ++中,您很幸运,您的编译器约定与实际数据格式相匹配(在C ++中,编译器/平台都有自己的约定,可以通过编译器选项,#pragmas等进行调整)。
如果确实如此,您可以逐项“手动”从缓冲区中提取数据。实际上,这就是你应该做的一般 - 尽管你可以为这些目的制作一些图书馆,让你的生活更轻松。
或者你可以使用C ++ / CLI,也许你会很幸运(再次)。