New submission from Marc Le Roy <mleroy...@gmail.com>: The structure : typedef struct __attribute__ ((packed)) { unsigned int F0:24; unsigned int F3:24; unsigned int F6:24; unsigned int F9:24; } StructF_T; is mapped as expected by GCC under both Linux and Cygwin. As expected, the memory layout seen by the C program is : 0x111111222222333333444444
Using this definition : class StructF(ctypes.BigEndianStructure): _pack_ = 1 _fields_ = [ ('F0', ctypes.c_uint, 24), ('F3', ctypes.c_uint, 24), ('F6', ctypes.c_uint, 24), ('F9', ctypes.c_uint, 24), ] The memory layout seen from Python is not consistent : 0x11111100222222003333330044444400 It seems that the pack option is ignored by ctypes in such a case. I found the same problem using both ctypes.BigEndianStructure and ctypes.LittleEndianStructure ---------- components: ctypes messages: 305914 nosy: mleroy003 priority: normal severity: normal status: open title: Ctypes Packing Bitfields Incorrectly - GCC both Linux and Cygwin versions: Python 3.6 _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue31987> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com