python ctypes结构错误的字节大小
import ctypes
from ctypes import *
class iot_plc_upgrade_start_dl(ctypes.Structure):
# _pack_ = 1 解决长度计算问题
_fields_ = [('basic_info',c_int), # 4 b'00000000' 4 4
('upgrade_id',c_int), # 4 b'00000000 01000000' 8 8
('time_window',c_ushort), # 2 b'00000000 01000000 10270000' 10 12
('remote_block_cnt',c_ushort), # 2 b'00000000 01000000 10270100' 12 12
('remote_block_size',c_ushort), # 2 b'00000000 01000000 10270100 90010000' 14 16
('level_one_pco_count',c_ubyte), # 1 b'00000000 01000000 10270100 90010500' 15
('fw_checksum',c_ulong), # 4 b'00000000 01000000 10270100 90010500 54b3e994' 19
('pib_checksum',c_int), # 4 b'00000000 01000000 10270100 90010500 54b3e994 4b6c7160' 23
('fw_size',c_int), # 4 b'00000000 01000000 10270100 90010500 54b3e994 4b6c7160 20780400' 27
('pib_size',c_ushort), # 2 b'00000000 01000000 10270100 90010500 54b3e994 4b6c7160 20780400 00300000' 29
('fw_version',c_int), # 4 b'00000000 01000000 10270100 90010500 54b3e994 4b6c7160 20780400 00300000 11000160' 33
('pib_version',c_int), # 4 b'00000000 01000000 10270100 90010500 54b3e994 4b6c7160 20780400 00300000 11000160 11000160' 37
('block_size',c_ushort), # 2 b'00000000 01000000 10270100 90010500 54b3e994 4b6c7160 20780400 00300000 11000160 11000160 c8000000' 39
('upgrade_type',c_ubyte), # 1 b'00000000 01000000 10270100 90010500 54b3e994 4b6c7160 20780400 00300000 11000160 11000160 c8000100' 40
('broadcast_retry_times',c_ubyte), # 1 b'00000000 01000000 10270100 90010500 54b3e994 4b6c7160 20780400 00300000 11000160 11000160 c8000101' 41
('phase_one_broadcast_times',c_ushort), # 2 b'00000000 01000000 10270100 90010500 54b3e994 4b6c7160 20780400 00300000 11000160 11000160 c8000101 00000000' 43
('dst_total_num',c_ushort), # 2 b'00000000 01000000 10270100 90010500 54b3e994 4b6c7160 20780400 00300000 11000160 11000160 c8000101 00000000' 45
('dst_num',c_ubyte), # 1 b'00000000 01000000 10270100 90010500 54b3e994 4b6c7160 20780400 00300000 11000160 11000160 c8000101 00000000 00000000' 46
]
cmd = iot_plc_upgrade_start_dl()
cmd.basic_info=0
cmd.upgrade_id=1
cmd.time_window=10000
cmd.remote_block_cnt=1
cmd.remote_block_size=400
cmd.level_one_pco_count=5
cmd.fw_checksum=2498343764
cmd.pib_checksum=1618046027
cmd.fw_size=292896
cmd.pib_size=12288
cmd.fw_version=1610678289
cmd.pib_version=1610678289
cmd.block_size=200
cmd.upgrade_type=1
cmd.broadcast_retry_times=1
cmd.phase_one_broadcast_times=0
cmd.dst_total_num=0
cmd.dst_num=0
r = byref(cmd)
b = string_at(r, sizeof(cmd))
print(sizeof(cmd))
import binascii
print(binascii.hexlify(b))
设置数据对其的字节数,与c语言的数据对齐有关。
详细