C++ 中的位集初始化

Bitset Initializing in C++

class Address {

    private :

        unsigned char arr[4] = {0};
        bitset<8>  bits[4];

    public :

        Address(){
            char  ip[50];
            char temp[4];
            cout <<"Enter your IP ADDRESS";
            cin >>ip;
            int i;
            int k=0;
            for(i=0;ip[i]!='[=10=]';i++){

               if(ip[i]!='.') arr[k]=arr[k]*10 + (ip[i]-48);
               else k++;

            //Easy PARSE
            }
        }
};

我需要为 IPV4 实施 Address class。当我调用 Address class 的构造函数时,我正在接受-> 将输入解析为 4 个 8 位数组,这基本上是 IPV4 的 4 个八位字节。 255.255.255.255 例如。 现在我需要将它转换为 4 的二进制数组。我不想为此创建外部二进制转换器。我愿意使用 bitset 来实现它。现在的问题是,我还没有找到一个 bitset 函数来初始化位(从十进制转换为 bitset),除了它的构造函数,它在我的 Address class 被调用。我可以通过将 4 个单独的成员指针键入 bitset<8> 并在 Address() 中分配每个成员指针来实现,但这是非常不优雅的方法。有任何想法吗? :/

您可以在构造后使用赋值运算符更改bitset

这可能是您要查找的部分:

for(int i=0; i <4; i++) {
    bits[i] = bitset<8>(arr[i]);
}

这样的事情怎么样:

#include <iostream>
#include <bitset>

int main()
{
    std::bitset<8> bits[4]; 
    std::cout << "Enter IP: ";

    for (auto &bit : bits)
    {
        unsigned long n;
        std::cin >> n;
        bit = n;
        std::cin.ignore();
    }

    // test
    std::cout << std::endl;

    for (auto const &bit : bits)
        std::cout << bit.to_ulong() << " ";
    std::cout << std::endl;

    for (auto const &bit : bits)
        std::cout << bit.to_string();
    std::cout << std::endl;
}

https://ideone.com/AcvBvf

192 168 0 1 
11000000101010000000000000000001