Can anyone suggest a more efficient method to break apart a 64 bit dynamic bitset into 32 bit unsigned int chunks?

The conversion is needed because eventually a C style system IO call needs to be performed that can't deal with a boost::dynamic_bitset or std::bitset;

Thanks for any help/advice,
Graham

This works, but it feels inefficient:

#include <iostream>
#include "boost/dynamic_bitset.hpp"

using namespace std;
using namespace boost;
 
// Create a 64 bit dynamic bitset from two 32 bit words, not 64 bit portable, illustration only
dynamic_bitset<> create_64_bitset(unsigned int ms_word, unsigned int ls_word);

int main(int argc, char* argv[])
{
    dynamic_bitset<> bitset_64(
        create_64_bitset(static_cast<unsigned>(0xaaaaaaaa), 
                                    static_cast<unsigned>(0xbbbbbbbb)));
 
    cout << bitset_64 << endl;
 
    //  This whole portion, below, seems inefficient.  Is it?  Is there a better method?

    // Break 64 bit dynamic bitset into 32 bit words
    dynamic_bitset<> temp_bitset(bitset_64);
 
    // Get least sig. 32 bits
    unsigned int ls_word = ((bitset_64 <<= 32) >>= 32).to_ulong();
 
    // Get most sig 32 bits
    unsigned int ms_word = (temp_bitset >>= 32).to_ulong();
 
    cout << ls_word << endl << ms_word << endl;
 
    cin >> argc;
 
    return 0;
}

dynamic_bitset<> create_64_bitset(unsigned int ms_word, unsigned int ls_word)
{
    // Create a 64 bitset
    dynamic_bitset<> most_sig_word(64, ms_word);

    most_sig_word <<= 32;

    dynamic_bitset<> least_sig_word(64, ls_word);

    // Combine the two into one 64 bit bitset
    most_sig_word |= least_sig_word;
 
    return most_sig_word;
}