Выравнивание в поле структуры ctypes - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть библиотека с такими структурами:

#define __aligned_u64 __u64 __attribute__((aligned(8)))

struct my_struct {
    uint32_t a;
    uint32_t b;
    uint8_t c[8];
    uint32_t d;
    uint32_t e;
    __aligned_u64 f;
    __aligned_u64 g;
    uint64_t h;
    ...
} __attribute__((aligned(8)));

Я хочу проанализировать ее с помощью структуры ctypes.Я думаю, что атрибут выравнивания структуры (в конце) не важен для структуры Python (не путать с packed).

Но я подозреваю, что выравнивание полей f и g (тот же __aligned_u64 , используемый в ядре Linux ) может мешать расположению байтов, добавляя некоторый потенциальный заполнитель после поля e.Я не видел никакой опции в Структуре, чтобы определить это.

Есть идеи?Альтернативы?Я бы хотел, чтобы он был портативным ...

...