C ++中的位集初始化

时间:2018-05-01 19:55:27

标签: c++ constructor ipv4 bitset

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]!='\0';i++){

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

            //Easy PARSE
            }
        }
};

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

2 个答案:

答案 0 :(得分:1)

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

这可能是您正在寻找的部分:

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

答案 1 :(得分:1)

这样的事情怎么样:

#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