Я хочу упаковать следующие числа в 64-битное поле int64_t в следующем порядке:
Итак, 64 бита должны быть в следующем формате:
[ num1(8) | num2(8) | num3(32) | num4(16) ]
Я не могу обернуть голову вокруг логики упаковки битов, то есть я хочу, чтобы эти числа были упакованы в одно поле int64_t, аналогично этот вопрос.
Любая помощь с благодарностью.
Вы, вероятно, хотите это:
int8_t num1;
int8_t num2;
int32_t num3;
int16_t num4;
...
uint64_t number = ((uint64_t)num1 << (16 + 32 + 8)) | ((uint64_t)num2 << (16 + 32)) | ((uint64_t)num3 << 16) | (uint64_t)num4;
Из этого вы должны быть в состоянии выяснить, как сделать обратное преобразование. Если нет, отправьте другой вопрос.
Других решений пока нет …