我有一个C代码:
结构:
[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Ansi, Size = 116)]
public struct pLogin
{
public pHeader _header;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 12)]
public string senha;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 12)]
public string login;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
public byte[] unk1;
public int algo1;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 42)]
public byte[] unk2;
public short algo2;
//versao do cliente
public ushort cliver;
public ushort unk3;
public int umBool;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
public byte[] mac;
}
[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Ansi, Size = 12)]
public struct pHeader
{
public ushort size;
public byte key;
public byte checksum;
public ushort packetId;
public ushort clientId;
public uint timestamp;
}
登录功能:
^{pr2}$现在缓冲区转换器类:
public static Byte[] StructureToBuffer<T>(T structure)
{
Byte[] buffer = new Byte[Marshal.SizeOf(typeof(T))];
unsafe
{
fixed (byte* pBuffer = buffer)
{
Marshal.StructureToPtr(structure, new IntPtr((void*)pBuffer), true);
}
}
return buffer;
}
public static T BufferToStructure<T>(Byte[] buffer, Int32 offset)
{
unsafe
{
fixed (Byte* pBuffer = buffer)
{
return (T)Marshal.PtrToStructure(new IntPtr((void*)&pBuffer[offset]), typeof(T));
}
}
}
代码abocve从一个结构创建一个带有登录数据的字节数组。
有没有一种方法可以在python中序列化/反序列化缓冲区数组?-
我不知道如何在python中实现它,因为我没有看到很多关于字节数组的文章。在
当然有几种方法。在
有一个built-in ^{} module ,它需要一些手动工作来计算出结构的格式字符串。在
您还可以使用更高级的第三方库,如^{} (我可以推荐)。在
使用Construct,您的结构可能看起来像
–一个相当直接的C原稿翻译,并提供一个数据缓冲区,然后您可以做如下事情
^{pr2}$相关问题 更多 >
编程相关推荐