Упаковка нескольких целых чисел в 64-битное целое

Я хочу упаковать следующие числа в 64-битное поле int64_t в следующем порядке:

  • int8_t num1
  • int8_t num2
  • int32_t num3
  • int16_t num4

Итак, 64 бита должны быть в следующем формате:

[  num1(8)  |  num2(8)  |       num3(32)       |   num4(16)  ]

Я не могу обернуть голову вокруг логики упаковки битов, то есть я хочу, чтобы эти числа были упакованы в одно поле int64_t, аналогично этот вопрос.

Любая помощь с благодарностью.

-2

Решение

Вы, вероятно, хотите это:

  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;

Из этого вы должны быть в состоянии выяснить, как сделать обратное преобразование. Если нет, отправьте другой вопрос.

3

Другие решения

Других решений пока нет …