объединить std::bitset в один char

У меня есть 4 переменные которые я перевел в двоичную систему и вывожу в консоль.

std::cout <<std::bitset<8>(a) << std::bitset<8>(b) << std::bitset<8>(c) << std::bitset<8>(d);

Вывод такой

11111111111111111111111100000000

как можно объединить эти 4 переменные в один 32х битный char?


Ответы (1 шт):

Автор решения: Daniil Loban

Для получения значения из битсета используем to_ullong, для составления числа из полученных чисел используем побитовые операции сдвиг << и побтовое или |

Разумеется если есть изначальные char переменные то можно сразу работать с ними не приьбегая к to_ullong битсета.

#include <iostream>
#include <string>
#include <bitset>

int main()
{
  unsigned char a = 0x89;
  unsigned char b = 0xAB;
  unsigned char c = 0xCD;
  unsigned char d = 0xEF;

  std::bitset<8> A = std::bitset<8>(a);
  std::bitset<8> B = std::bitset<8>(b);
  std::bitset<8> C = std::bitset<8>(c);
  std::bitset<8> D = std::bitset<8>(d);
 
  std::cout << A << B << C << D << std::endl;
  
  int res32 = int((unsigned char)(A.to_ullong()) << 24 |
              (unsigned char)(B.to_ullong())     << 16 |
              (unsigned char)(C.to_ullong())      << 8 |
              (unsigned char)(D.to_ullong()));
            
  std::cout << res32 << " = " << std::hex << res32;

}

10001001101010111100110111101111

-1985229329 = 89abcdef

Все зависит от задачи и тот же результат можно получить меньшими усилиями:

  unsigned int a = 0x89ABCDEF;
  std::bitset<32> A = std::bitset<32>(a);
  std::cout << A << std::endl;
  int res32 = int(A.to_ullong());
  std::cout << res32 << " = " << std::hex << res32;
→ Ссылка