将std :: vector <bool>转换为std :: string

时间:2017-01-04 05:20:45

标签: c++

我有一个二进制数据向量,并希望将其转换为字符串。我怎样才能完成这项任务。只是为了清楚我并没有想要一个只有1和0的字符串。我想要它,以便每8个条目等于一个字符。

1 个答案:

答案 0 :(得分:2)

迭代这些位并使用按位运算符将它们放入char值。

这没什么特别棘手的。如果您不熟悉按位算术,可以尝试先用更熟悉的语言实现它,然后将其转换为C ++作为练习。

std::size_t divide_rounding_up( std::size_t dividend, std::size_t divisor )
    { return ( dividend + divisor - 1 ) / divisor; }

std::string to_string( std::vector< bool > const & bitvector ) {
    std::string ret( divide_rounding_up( bitvector.size(), 8 ), 0 );
    auto out = ret.begin();
    int shift = 0;

    for ( bool bit : bitvector ) {
        * out |= bit << shift;

        if ( ++ shift == 8 ) {
            ++ out;
            shift = 0;
        }
    }
    return ret;
}