using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
namespace RFID.ZXRIS3600.Utility
{
class StructBytesConverter
{
public static byte[] StructToBytes(object structObj)
{
int size = Marshal.SizeOf(structObj);
IntPtr buffer = Marshal.AllocHGlobal(size);
try
{
Marshal.StructureToPtr(structObj, buffer, false);
byte[] bytes = new byte[size];
Marshal.Copy(buffer, bytes, 0, size);
return bytes;
}
finally
{
Marshal.FreeHGlobal(buffer);
}
}
public static object BytesToStruct(byte[] bytes, Type strcutType)
{
int size = Marshal.SizeOf(strcutType);
IntPtr buffer = Marshal.AllocHGlobal(size);
try
{
Marshal.Copy(bytes, 0, buffer, size);
return Marshal.PtrToStructure(buffer, strcutType);
}
finally
{
Marshal.FreeHGlobal(buffer);
}
}
}
}
struct ReaderConfig
{
public ReaderConfig(T_ReaderConfig config)
{
this.config = config;
this.data = StructBytesConverter.StructToBytes(config);
}
public ReaderConfig(byte[] data)
{
this.data = data;
this.config = (T_ReaderConfig)StructBytesConverter.BytesToStruct(data, typeof(T_ReaderConfig));
}
public ReaderConfig(T_ReaderConfig config, byte[] data)
{
this.config = config;
this.data = data;
}
public T_ReaderConfig config;
public byte[] data;
};
struct T_MWIP
{
public uint dwMWIP; /*中间件ip,用于上报本阅读器ip*/
public ushort wMWPort;
public ushort wPad;
public static T_MWIP ConvertOrder(T_MWIP wip)
{
wip.dwMWIP = HostOrderConverter.Convert(wip.dwMWIP);
wip.wMWPort = HostOrderConverter.Convert(wip.wMWPort);
return wip;
}
};
class HostOrderConverter
{
public static ushort Convert(ushort x)
{
return (ushort)((x & 0x00ff) << 8 | (x & 0xff00) >> 8);
}
public static uint Convert(uint x)
{
return ((x & 0xff000000) >> 24) | ((x & 0x00ff0000) >> 8)
| ((x & 0x0000ff00) << 8) | ((x & 0x000000ff) << 24);
}
}
结构数组转换
最新推荐文章于 2024-02-02 22:08:05 发布