Как получить правильный размер структуры, используя ctypes в Python - PullRequest
0 голосов
/ 16 апреля 2020

Я объявил структуру с битовыми полями, в C / C ++ размер структуры равен 5, как и ожидалось, а в Python - 6. (Python 3.5.2 (по умолчанию, 12 ноября 2018, 13: 43:14))

from ctypes import *
class sHeader(LittleEndianStructure):
        _pack_ = 1
        _fields_ = [
            ("Field1", c_uint8, 4),
            ("Field2", c_uint16, 12),
            ("Field3", c_uint16, 12),
            ("Field4", c_uint16, 12)]

print(sizeof(sHeader))

Прикрепленный код C ++ здесь:

#include <array>
#include <iostream>

struct __attribute__((packed)) sHeader{
        uint8_t Filed1: 4;
        uint16_t Filed2: 12;
        uint16_t Filed3: 12;
        uint16_t Filed4: 12;
};

int main()
{
        std::cout << sizeof(sHeader) << std::endl;
        return 0;
}
...