当ctype结构作为类属性出现时,python类对象的字节数组抛出错误



我能够使用以下方法将ctype类对象转换为bytearray()-

from ctypes import *
class get_log_input_payload(Structure):
_pack_ = 1
_fields_ = (
("log_identifier",c_uint8*16),
("offset",c_uint32),
("length",c_uint32)
)
payload = get_log_input_payload()
b_array = bytearray(payload)

但当我们在python类中使用ctype类作为属性时,bytearray()开始抛出错误">TypeError:无法将"_ctypes.PyCStructType"对象转换为字节数组">

from ctypes import *
class Mailbox:
get_log_input_payload = type("get_log_input_payload", (Structure, ), {"_fields_" : [("log_identifier",c_uint8*16),
                  ("offset",c_uint32),
                  ("length",c_uint32)]})
obj = Mailbox()
payload = obj.get_log_input_payload 
b_array = bytearray(payload) # <--- Throwing error

注:更新代码中的拼写错误

不确定为什么要用type手动创建类,但提供的代码中有两个错误。_fields_键之后的type调用中缺少冒号(:(,然后必须实例化该类型:

from ctypes import *
class Mailbox:
get_log_input_payload = type("get_log_input_payload", (Structure, ), {"_fields_": [("log_identifier",c_uint8*16),
#                                                                     missing colon ^                                                                                        ("offset",c_uint32),
                  ("length",c_uint32)]})
obj = Mailbox()
payload = obj.get_log_input_payload()  # missing () to instantiate the type
b_array = bytearray(payload)
print(b_array)

输出:

bytearray(b'x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00')

最新更新