• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed C++ Zamiana bitset<32> na bitset<8>

0 głosów
948 wizyt
pytanie zadane 13 kwietnia 2020 w C i C++ przez Agtal Nowicjusz (150 p.)
zamknięte 13 kwietnia 2020 przez Agtal
Witam.
Pewna funkcja w C++ zwraca mi wynik w bitset<32>. Czy da się stworzyć drugą funkcję, która "podzieli" mi tą 32-bitową liczbę na 4 liczby 8-bitowe? Przykładowo: bitset<32>x = 11111111000000001111111100000000 i teraz liczby miałyby się równać:

a=11111111, b=00000000, c=11111111, d=00000000

Lub od razu w systemie dziesiętnym (a=255, b=0, c=255, d=0)

Kompletnie nie wiem jak operować na takim typie danych... Z góry dziękuję za pomoc.
komentarz zamknięcia: Odpowiedź rozwiązała problem.

1 odpowiedź

+1 głos
odpowiedź 13 kwietnia 2020 przez tangarr Mędrzec (155,140 p.)
wybrane 13 kwietnia 2020 przez Agtal
 
Najlepsza

1. Przekonwertuj bitset do ulong (bitset::to_ulong)
2. Wyciągnij poszczególne bajty i wpisz ich wartość do bitset<8>

#include <iostream>
#include <bitset>

using namespace std;

struct Cztery8 {
    bitset<8> b1;
    bitset<8> b2;
    bitset<8> b3;
    bitset<8> b4;
};

Cztery8 bitset32ToCztery8(const bitset<32> &input) {
    auto tmp = input.to_ulong();
    Cztery8 result;
    result.b4 = bitset<8>(tmp & 0xFF);
    tmp >>= 8;
    result.b3 = bitset<8>(tmp & 0xFF);
    tmp >>= 8;
    result.b2 = bitset<8>(tmp & 0xFF);
    tmp >>= 8;
    result.b1 = bitset<8>(tmp & 0xFF);
    return result;
    
}

int main()
{
    bitset<32> b("11111111000000001111111100000000");
    auto x4 = bitset32ToCztery8(b);
    std::cout << b << std::endl;
    std::cout << x4.b1 << std::endl;
    std::cout << x4.b2 << std::endl;
    std::cout << x4.b3 << std::endl;
    std::cout << x4.b4 << std::endl;

    return 0;
}

 

komentarz 13 kwietnia 2020 przez Agtal Nowicjusz (150 p.)
Działa! Bardzo dziękuję za pomoc :)

Podobne pytania

0 głosów
1 odpowiedź 2,241 wizyt
pytanie zadane 28 października 2018 w C i C++ przez jjanickij Użytkownik (510 p.)
0 głosów
1 odpowiedź 298 wizyt
pytanie zadane 4 lutego 2018 w C i C++ przez Niebieski_Zerg Użytkownik (610 p.)
0 głosów
1 odpowiedź 274 wizyt

93,742 zapytań

142,678 odpowiedzi

323,297 komentarzy

63,328 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...