Skip to content

ctypes: bitfield lost data with union on linux platform#95496

@px528

Description

@px528

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]

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    Status

    Done

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions