Упаковка нескольких целых чисел в 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, аналогично этому вопросу.

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

1 ответ

Решение

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

  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;

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

Другие вопросы по тегам