Инициализация битов в C ++ - PullRequest
0 голосов
/ 01 мая 2018
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
            }
        }
};

Мне нужно реализовать класс Address для IPV4. Когда я вызываю конструктор моего Address класса, я беру-> парсинг ввода в 8-битный массив из 4, что в основном составляет 4 октета IPV4. 255.255.255.255 Например. Теперь мне нужно преобразовать его в двоичный массив 4. Я не хочу создавать для этого внешний двоичный преобразователь. Я готов реализовать это, используя bitset. Теперь проблема в том, что я не нашел функцию bitset, которая позволяла бы мне инициализировать биты (преобразовать из десятичного в bitset) отдельно от ее конструктора, который вызывается, как только вызывается мой класс Address. Я могу сделать это, имея 4 отдельных указателя члена для типа bitset<8> и выделяя каждый из них в Address(), но это очень не элегантный подход. Есть идеи? : /

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

Как насчет этого:

#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
0 голосов
/ 01 мая 2018

Вы можете изменить bitset, используя оператор присваивания после построения.

Это может быть та часть, которую вы ищете:

for(int i=0; i <4; i++) {
    bits[i] = bitset<8>(arr[i]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...