字符串到二进制

时间:2010-08-16 10:03:58

标签: c++

我使用std::bitset<CHAR_BIT> binary('c');将字符转换为二进制 但这对字符串不起作用,

std::string str = "MyString";
std::bitset<SIZE_OF_STRING_IN_BITS> binary(str); //Error Exception

应该选择什么?

2 个答案:

答案 0 :(得分:2)

为什么要将原始字符放入bitset?为什么不是vector<char>

在任何情况下,您都可以通过c_str()成员函数获取字符串的原始底层位,该函数通常会将原始char*返回到原始字符串数据。

答案 1 :(得分:1)

您可以对字符串的每个字符重复此操作,每次都将位置由CHAR_BIT向左移位:

#include <bitset>
#include <string>
#include <iostream>
#include <numeric>
#include <climits>
template<size_t N>
std::bitset<N> string_to_bitset(const std::string& s)
{
    return accumulate(s.begin(), s.end(), std::bitset<N>(),
           [](const std::bitset<N>& l, char r)
           {
               return std::bitset<N>(r) | l<<CHAR_BIT;
           });
}
int main()
{
    std::string str = "MyString";
    const size_t SIZE_OF_STRING_IN_BITS = CHAR_BIT * 8;
    std::bitset<SIZE_OF_STRING_IN_BITS> binary = string_to_bitset<SIZE_OF_STRING_IN_BITS> (str);
    std::cout << binary << '\n';
}

看到bitset的大小必须是一个常量表达式,我会使用boost::dynamic_bitset,除非这个字符串是编译时常量。