使用STD bitset。我将sting转换为二进制new configuration。如果我这样做就可以了
string myString = "Hi";
for ( int i = 0; i < myString.size(); ++i)
{
cout << bitset<8>(myString.c_str()[i]) << endl;
}
如果我这样做就行了
string myString = "Hi";
for ( int i = 0; i < myString.size(); ++i)
{
cout << bitset<8>foo(myString.c_str()[i]) << endl;
}
但这不起作用,我想知道为什么
string myString = "Hi";
bitset<8>foo;
for ( int i = 0; i < myString.size(); ++i)
{
cout <<foo(myString.c_str()[i]) << endl;
}
我得到no match for call to ‘(std::bitset<8>) (const char&)’
我想我知道如何修复它,但我不明白为什么会这样?声明后无法插入bitset吗?
让我们再试一次,这样的事情会起作用
for (std::size_t i = 0; i < myString.size(); ++i)
{
bitset<8>bar(myString.c_str()[i]);
foo[i] = bar[i];
}
现在这样可行,但foo
中只有8位退出,bar
中的所有内容都正确加上我不喜欢它,似乎有很多代码。
我想要的只是声明foo
,然后在循环中向它插入位,我缺少什么?我不想使用任何第三方图书馆。
答案 0 :(得分:4)
使用构造函数创建对象的type(arguments)
语法与调用对象的函数或调用操作符的value(arguments)
语法之间的区别。< / p>
bitset
有一个构造函数,它采用整数类型,但它没有调用操作符。
在旁注中,s.c_str()[i]
是不必要的。使用s[i]
,或者更好的是,在字符串上使用for-range循环:
for (auto c : myString) {...}
答案 1 :(得分:1)
我想转换为base 2然后存储在动态分配中 bitset或矢量。我更喜欢将所有内容保存在bitsets中
位集矢量
#include <iostream>
#include <string>
#include <vector>
#include <bitset>
int main()
{
std::string myString = "Hi";
std::vector<std::bitset<8>> vec;
// populate vector
for (std::bitset<8> foo : myString)
vec.emplace_back(foo);
// print vec content
for (auto const &bits : vec)
std::cout << bits << std::endl;
return 0;
}
如果您想将bitset转换为字符串,可以使用bitset
.to_string()
方法