So, I am trying to understand why the size of my ctypes.Structure not what it should be. My code is the following, theres also calculating that the size should be afaik.
class FILE_HEAD(ctypes.Structure): _fields_ = [ ("name", ctypes.c_char * 4), # 4 bytes ("size", ctypes.c_int), # 4 bytes ("Cal_l", ctypes.c_double), # 8 bytes ("Cal_r", ctypes.c_double), # 8 bytes ("Speed_ChL", ctypes.c_byte), # 1 byte ("Speed_Pulses_ChL", ctypes.c_int), # 4 bytes ("Speed_factor_ChL", ctypes.c_double), # 8 bytes ("Quantity_ChL", ctypes.c_char * 3), # 3 bytes ("Description_ChL", ctypes.c_char * 32), # 32 bytes ("Unit_ChL", ctypes.c_char * 8), # 8 bytes ("Speed_ChR", ctypes.c_byte), # 1 byte ("Speed_Pulses_ChR", ctypes.c_int), # 4 bytes ("Speed_factor_ChR", ctypes.c_double), # 8 bytes ("Quantity_ChR", ctypes.c_char * 3), # 3 bytes ("Description_ChR", ctypes.c_char * 32), # 32 bytes ("Unit_ChR", ctypes.c_char * 8) # 8 bytes ] # = 136 bytes
So, I think the structure should be 136 bytes in size. But when I let python print the size of the print ctypes.sizeof(COMI_HEAD) structure instance, I get 144 . I do not know where these 8 bytes come from.
I filled it with the following data and wrote it to a file to see all the bytes and analyze where the bytes are.
comi = FILE_HEAD() comi.name = "COMI" comi.size = ctypes.sizeof(comi) - 8 comi.Cal_l = 342.324 comi.Cal_r = 342.324 comi.Speed_ChL = ctypes.c_byte(1) comi.Speed_Pulses_ChL = 123 comi.Speed_factor_ChL = 123.456 comi.Quantity_ChL = "Tes" comi.Description_ChL = "Test Desc" comi.Unit_ChL = "t/t" comi.Speed_ChR = ctypes.c_byte(1) comi.Speed_Pulses_ChR = 123 comi.Speed_factor_ChR = 123.456 comi.Quantity_ChR = "Tes" comi.Description_ChR = "Test Desc" comi.Unit_ChR = "t/t"
Here is what my HEX-Viewer shows. I am marked in red, which bytes, which in my opinion are 8 bytes, which are too many, but I do not know where these 8 bytes come from. The first 3 bytes I marked come directly after Speed_ChL , which should be 1 byte, but looks like its 4 bytes. The next 5 bytes marked by me are at the end of the file. Enter this Unit_ChR line, which should be 8 bytes, but looks like 13 bytes.

Can someone tell me where is my mistake? What am I doing wrong here? Any help is appreciated!