объединить 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;