我使用std::bitset<CHAR_BIT> binary('c');
将字符转换为二进制
但这不适用于字符串,
std::string str = "MyString";
std::bitset<SIZE_OF_STRING_IN_BITS> binary(str); //Error Exception
有什么替代方法?
最佳答案
您可以在字符串的每个字符上重复此操作,每次将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';
}
鉴于位集的大小必须是一个常量表达式,除非该字符串是一个编译时常量,否则我将使用
boost::dynamic_bitset
。关于c++ - 字符串到二进制,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3492162/