below example is simple and can be reproduced.
fromctypesimportStructure,Unionfromctypesimportalignment,sizeoffromctypesimportc_int8,c_int16,c_int32,c_int64fromctypesimportc_uint8,c_uint16,c_uint32,c_uint64classsub_type(Structure):
_fields_= [
('a',c_uint8,4),
('b',c_uint8,4),
('c',c_uint16,10),
('d',c_uint16,10),
('e',c_uint8,1),
('f',c_uint8,1),
('g',c_uint8,1),
]
classmain_type(Union):
byte_length=sizeof(sub_type)
_fields_= [
("data", sub_type),
("asbytes", c_uint8*byte_length),
]
a=main_type(data=sub_type(e=1,f=1,g=1))
print(list(a.asbytes))
#on windows, print value is correct#[0, 0, 0, 0, 0, 0, 7, 0]#on linux, the value is wrong at all. the length is correct, but value is wrong.#[0, 0, 0, 0, 0, 0]
below example is simple and can be reproduced.