(1)字节数据转结构体的函数如下所示。
/// <summary>
/// 字节转结构体,测试好用
/// </summary>
/// <param name="bytes"></param>
/// <param name="type"></param>
/// <returns></returns>
private object BytesToDataStruct(byte[] bytes, Type type)
{
try
{
int size = Marshal.SizeOf(type);
if (size > bytes.Length)
{
return null;
}
IntPtr structPtr = Marshal.AllocHGlobal(size);
Marshal.Copy(bytes, 0, structPtr, size);
object obj = Marshal.PtrToStructure(structPtr, type);
Marshal.FreeHGlobal(structPtr);
return obj;
}
catch (Exception ex)
{
Logger.Debug("MainWinViewModel()->BytesToDataStruct()->" + ex);
object obj = null;
return obj;
}
}
(2)结构体定义
public struct SwmData1
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
public char[] Device_ID; //size of 2
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
public char[] Message_ID; //size of 3
public short Message_LH;
public byte Training_ID;
}
(3)函数调用过程
SwmData1 frame = (SwmData1)BytesToDataStruct(receiveBytes, typeof(SwmData1));