我能够使用以下方法将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')