У меня есть структура в c, подобная этой
struct RegisterStruct
{
uint64_t b_0 : 64;
uint64_t b_1 : 64;
uint64_t c_0 : 64;
uint64_t c_1 : 64;
uint64_t c_2 : 64;
uint64_t d_0 : 64;
uint64_t d_1 : 64;
};
Я хотел бы объединить поля в uint64_t
целое число. Каждое из полей должно занимать определенное количество битов, определенных следующим образом:
b_0: 4bits
b_1: 4bits
c_0: 8bits
c_1: 8bits
c_2: 8bits
d_1: 16bits
d_2: 16bits
Результатом должно быть целое число uint64_t
, содержащее объединенные битовые поля (от b_0
до d_2
), каждое из которых занимает заданное количество бит.
Вот то, что я пробовал, но я не думаю, что это правильное решение:
struct RegisterStruct Register;
Register.b_0 = 8;
Register.b_1 = 8;
Register.c_0 = 128;
Register.c_1 = 128;
Register.c_2 = 128;
Register.d_0 = 32768;
Register.d_1 = 32768;
uint64_t reg_frame =Register.b_0<<60|Register.b_1<<56|Register.c_0<<48|Register.c_1<<40|Register.c_2<<32|Register.d_0<<16|Register.d_1;