Python ctypes estructura mal tamaño byte

Así que estoy tratando de averiguar por qué el tamaño de mis ctypes.Structure no es lo que debería ser. Mi código es el siguiente, también está el cálculo de cuál debería ser el tamaño de la letra.

 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 

Así que creo que la estructura debería tener un tamaño de 136 bytes. Pero cuando dejo que Python imprima el tamaño de una instancia de la estructura print ctypes.sizeof(COMI_HEAD) , obtengo 144 . No sé de dónde vienen esos 8 bytes.

Lo he llenado con los siguientes datos y lo escribí en un archivo para ver todos los bytes y analizar dónde están los bytes.

 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" 

Esto es lo que me muestra mi visor de HEX. He marcado en rojo, qué bytes creo que son los 8 bytes que son demasiado, pero no sé de dónde provienen estos 8 bytes. Los primeros 3 bytes que Speed_ChL vienen directamente después de Speed_ChL que debería ser de 1 byte, pero se parece a sus 4 bytes. Los siguientes 5 bytes que he marcado están al final del archivo. Hay una cadena Unit_ChR que debería tener 8 bytes pero parece que tiene 13 bytes.

introduzca la descripción de la imagen aquí

¿Puede alguien decirme dónde está mi error? ¿Qué estoy haciendo mal aquí? Cualquier ayuda es apreciada!

Ok, así que he encontrado la solución. Gracias a Andreas que me dijo que mi problema tiene que ver con la compensación . Entonces, la solución es agregar un _pack_ = 1 a la estructura como esa.

 class FILE_HEAD(ctypes.Structure): _pack_ = 1 _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