我正在移植一个简单的蓝牙应用程序,它通过L2Cap协议向蓝牙设备发送“魔力”数据包。。在
我在将C语言中的struct对象转换为python等效对象时遇到了一个问题。。在
在c中:
/* command types */
#define CFGBT_TYPE_SETREQ 0x00
#define CFGBT_TYPE_SETRES 0x01
#define CFGBT_TYPE_GETREQ 0x02
#define CFGBT_TYPE_GETRES 0x03
/* varid types */
#define CFG_VARIDT_UINT16 0x0000
#define CFG_VARIDT_UINT32 0x1000
#define CFG_VARIDT_STRING16 0x2000
typedef struct {
uint8_t type, status;
uint16_t varid;
uint8_t value[16];
} __attribute__((packed)) CFGBTFRAME;
static CFGBTFRAME c;
然后在应用程序中是这样使用的:
^{pr2}$你能告诉我如何使用python构造同样的包/结构吗?在
我知道我可能需要使用ctypes并创建“empty”类,但是如何将这些结合起来呢?在
您可以使用
struct
模块将值打包为字节字符串,例如:或者,您可以使用
ctypes.Structure
来定义一个将代表您的结构的类。它的优点是更容易与Python代码一起使用,但是您必须考虑对齐和填充问题,并自己解决它们(可能使用struct
)。在如果您的目标是对一个对象中的一组键/值进行分组,那么可以使用}。在
dict
或{一句话应该是:
访问:CFGBTFRAME['type']
使用namedtuple:
^{pr2}$有关namedtuple的详细信息,请参见http://docs.python.org/library/collections.html#collections.namedtuple。在
相关问题 更多 >
编程相关推荐