C++ C++;:关于在位集中插入

C++ C++;:关于在位集中插入,c++,C++,使用STD位集。我正在将一个sting转换为二进制。如果我这样做,它会起作用 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(); ++

使用STD位集。我正在将一个sting转换为二进制。如果我这样做,它会起作用

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”;
对于(int i=0;icout这是使用构造函数创建对象的
类型(参数)
语法与调用对象的函数或调用运算符的
值(参数)
语法之间的区别

位集
具有采用整数类型的构造函数,但它没有调用运算符

不过,我不了解总体目标。如果您想写出每个字符的位,第一个方法可以工作。(第二个代码段不编译。)您希望第三个不同的代码片段实现什么?如果您想收集所有字符的所有位,那么您的位集不够大;它只有8位的空间

在旁注中,
s.c_str()[i]
是不必要的。使用
s[i]
,或者更好的是,在字符串上使用for范围循环:

for (auto c : myString) {...}

我想转换为base 2,然后存储在动态分配的 位集或向量。我更喜欢将所有内容保留在位集中

位集向量

#包括
#包括
#包括
#包括
int main()
{
std::string myString=“Hi”;
std::vec;
//填充向量
for(std::bitset foo:myString)
vec.后置炮台(foo);
//打印vec内容
用于(自动常量和位:vec)

std::cout
foo(myString.c_str()[i])
不确定您试图对该行执行什么操作,但是
位集
没有
运算符()
@Borgleader我正在尝试将字符串转换为二进制。如果不使用right之类的东西,就无法创建动态位集?是否可以使用位集进行转换,然后添加到这样的向量?`vect.push_back(位集(myString.c_str()[I]))问题是您实际想要什么。您想要字符串的base-2表示为字符串吗?在这种情况下,请执行与代码片段1相同的操作,但将
cout
替换为
ostring位集或向量。我更喜欢将所有内容都保存在位集中“我想转换为基2,然后存储在动态分配的位集或向量中”-为什么?所有内容都已经是二进制的。听起来你好像误解了计算机中的存储是如何工作的。@KillzoneKid位集向量
for (std::size_t i = 0; i < myString.size(); ++i)
  {
   bitset<8>bar(myString.c_str()[i]);
   foo[i] = bar[i];
  }
for (auto c : myString) {...}
#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;
}