Структура Windows c ++ с битовым полем, упаковка - PullRequest
0 голосов
/ 11 мая 2018
union AP
{
    UCHAR bin[28];
    struct{
    ULONGLONG TA    :42;
    UINT St     :6;
    UINT Reserved1  :3;
    UINT fo     :4;     
    UINT P          :9;

    UINT cy :17;
    UINT Reserved2  :3;
    UINT A  :12;

    UINT Fg :8;
    UINT P2         :24;

    UINT Fp     :10;
    UINT SChNum :22;

    UINT ItAdrs:32;

    UINT IEAdrs:32;

}stt;

Я хочу использовать stt, когда размер stt равен 28 байтам. но размер этого кода stt составляет 32 байта. Я думаю, что этот код нуждается в «упаковке» из-за «ULONGLONG TA: 42».

#pragma pack(push,1) 
#pragma pack(1) 

оба кода не работали. как упаковать структуру, которая имеет символ битового поля. Я создаю свой код на Visual Studio 2012 с C ++, Windows7

1 Ответ

0 голосов
/ 11 мая 2018

Стандарты C / C ++ позволяют компилятору вставлять заполнение между битовыми полями, когда базовые типы битовых полей различаются. Таким образом, заполнение, вероятно, происходит между вашим ULONGLONG и последующим UINT. Попробуйте разделить ваш ULONGLONG на два члена UINT; это должно устранить заполнение.

...