日期:2014-05-18  浏览次数:20877 次

请问一个socket通信中,byte[]转换为struct的问题?
如果我c++发送一个struct类型的byte数组
C/C++ code
struct login
{
   char login;
   char user[20];
   char password[20];
}

请问c#的收到这个byte数组怎么转换为struct类型?
c#结构体中数组不是不可以是固定长度吗?
这个怎么转换呀?

------解决方案--------------------
/// <summary>
/// byte数组转结构体
/// </summary>
/// <param name="bytes">byte数组</param>
/// <returns>转换后的结构体</returns>
public object ConvertToStruct(byte[] bytes)
{
int size = 0;
//得到结构体的大小
size = Marshal.SizeOf(typeof(结构体类型));
//分配结构体大小的内存空间
IntPtr structPtr = Marshal.AllocHGlobal(size);
//将byte数组拷到分配好的内存空间
Marshal.Copy(bytes, 0, structPtr, size);
//将内存空间转换为目标结构体
object obj = Marshal.PtrToStructure(structPtr, typeof(结构体类型));
//释放内存空间
Marshal.FreeHGlobal(structPtr);
//返回结构体
return obj;
}

需要注意你定义的结构体的字节对齐类型应该和c++那边字节对齐类型一样