Преобразовать битовый набор <64> в quint8 - PullRequest
0 голосов
/ 29 августа 2018

У меня есть bitset<64> (16-битная последовательная и 48-битная временная метка), которую я хочу записать в quint8 *data.

Когда bitset<64> выглядит следующим образом:

1111001010100101...

Я хочу, чтобы data выглядело так:

data[0] = 11110010
data[1] = 10100101
...

Был бы благодарен, если бы кто-нибудь мог помочь мне реализовать это.

1 Ответ

0 голосов
/ 29 августа 2018

Если я вас правильно понял, то это выполнит то, что вы просите:

#include <iostream>
#include <bitset>

int main()
{
    std::bitset<64> bits64{0b0111101111011001110011010101110001111011110110011100110101011100};

    /*
    01111011
    11011001
    11001101
    01011100
    01111011
    11011001
    11001101
    01011100
    */

    for (auto i = 7; i >= 0 ; i--)
        std::cout << std::bitset<8>{bits64.to_ullong() >> (i * 8)} << std::endl;

    return 0;
}

Выход:

01111011
11011001
11001101
01011100
01111011
11011001
11001101
01011100

Вы можете изменить оператор цикла for, чтобы он излучал в любом порядке байтов, который вы выберете.

Ключевым моментом является использование оператора shift (<< или >>) для интегрального значения.

...