• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Klasa dla operacji na IP.

0 głosów
114 wizyt
pytanie zadane 16 czerwca 2016 w C i C++ przez użytkownika Ehlert Maniak (68,560 punkty)

Cześć.

Krótko zwięźle i na temat. Najlepszy sposób na trzymanie IP w klasie na którym będę operować.

short ip[4]; 
bool ip[4][8];
std::bitset<8> ip[4];
std::string ip;
char ip[4][8];
char * ip;

Chciałbym zaznaczyć, że chcę przeprowadzać operacje na bitach, więc ciągłe rzutowanie z char/string na liczbę będzie... Nieprofesjonalne, niewydajne?

2 odpowiedzi

+2 głosów
odpowiedź 17 czerwca 2016 przez użytkownika draghan Szeryf (78,420 punkty)
wybrane 17 czerwca 2016 przez użytkownika Ehlert
 
Najlepsza
Użyj tego, z czym Ci dobrze. ;) Nie wiem, co konkretnie planujesz z tym działać, ale myślę że najwygodniej będzie dla Ciebie użyć std::bitset lub zwykłej tablicy shortów.

Nie wiem, jak wygląda sprawa przechowywaniem danych w std::bitset, ale sądzę że operacje wyłuskania bitu ze słowa (short tab[]) nie są wiele kosztowniejsze od dostępu do bitu z std::bitset.

Piszesz ten kod na PC?
komentarz 17 czerwca 2016 przez użytkownika Ehlert Maniak (68,560 punkty)
Tak. Program do adresacji. Dzielenie na podsieci. Itd
komentarz 17 czerwca 2016 przez użytkownika draghan Szeryf (78,420 punkty)
W takim razie nie przejmowałbym się tak bardzo szybkością działania, chyba że to aplikacja mająca działać w czasie rzeczywistym (application in real time) lub ma to być aplikacja czasu rzeczywistego (real-time application).

Nie warto szukać tak błahych optymalizacji na etapie projektowania systemu. Zaprojektuj most dla tych danych, uniezależnij swój kod od konkretnej implementacji - a w razie zauważalnej niezadowalającej wydajności (w co szczerze wątpię), zmień implementację.
komentarz 17 czerwca 2016 przez użytkownika Ehlert Maniak (68,560 punkty)
Doskonale rozumiem Twój tok myślenia ale mimo wszystko jak dla mnie jest on za mało zapobiegawczy. :) w tym przypadku wydajność idzie w parze z wygodą przeprowadzania operacji na bitach. Dzięki za dobre rady ;) Pozdrawiam
komentarz 17 czerwca 2016 przez użytkownika draghan Szeryf (78,420 punkty)

w tym przypadku wydajność idzie w parze z wygodą przeprowadzania operacji na bitach

Nadal nie mogę znaleźć innego wytłumaczenia dla tak pożądanej wydajności, niż działanie w czasie rzeczywistym. Niemniej wybrałbym chyba tablicę liczb - zdaje się być tutaj rozsądnym kompromisem.

Jeszcze jedno pytanie, bo mi to umknęło wcześniej - dlaczego chciałbyś użyć jako danych "nośnych" typu short? Przecież char jest ośmiobitowy, dla IPv4 byłby wystarczający - a sądząc po rozmiarach pozostałych Twoich propozycji, IPv6 nie planujesz obsługiwać.

+1 głos
odpowiedź 17 czerwca 2016 przez użytkownika ZakosiliMiNeta Nałogowiec (29,340 punkty)
Może wrzucić adres IP do unsigned int ? 4 bajty dostajesz i nimi operujesz bez problemu

Podobne pytania

0 głosów
1 odpowiedź 96 wizyt
pytanie zadane 5 stycznia 2016 w C i C++ przez użytkownika Konrad Nabożny Stary wyjadacz (13,120 punkty)
0 głosów
0 odpowiedzi 28 wizyt
pytanie zadane 7 sierpnia 2016 w Sieci komputerowe, internet przez użytkownika Evelek Stary wyjadacz (11,970 punkty)
0 głosów
2 odpowiedzi 347 wizyt
pytanie zadane 11 sierpnia 2015 w PHP, Symfony, Zend przez użytkownika makoso Mądrala (7,410 punkty)
...