Как установить номер в поле адреса?

Я хочу построить структуру записи. Проблема в том, что я не могу правильно построить поле адреса. Кто-нибудь может мне помочь?

Ps: адрес [16:2] начинается с бита 61 до бита 47, поэтому, пожалуйста, вы не можете сказать, что вы должны сдвинуть его на 32.

Рекорд, который я хочу установить

, 👍-2


1 ответ


2

Для этого я бы использовал битовые поля:

typedef union {
    struct {
        uint8_t raw[8]; // Необработанный доступ к байтам
    };
    struct {
        unsigned data:32;
        unsigned cs14:1;
        unsigned cs13:1;
        unsigned cs12:1;
        unsigned cs11:1;
        unsigned cs10:1;
        unsigned cs9:1;
        unsigned cs8:1;
        unsigned cs7:1;
        unsigned cs6:1;
        unsigned cs5:1;
        unsigned cs4:1;
        unsigned cs3:1;
        unsigned cs2:1;
        unsigned cs1:1;
        unsigned cs0:1;
        unsigned address:15;
        unsigned parity:1;
        unsigned stop:1;
    };
    struct {
        unsigned :32;
        unsigned cs:15;
        unsigned :17;
    };
} Packet;

Тогда вы можете:

Packet p;
p.data = 0x493DE26CUL;
p.address = 0x13f3;
p.cs3 = 1;
// or
p.cs = 0x0080;

и т. д.

,