[C++] Adres IP w postaci BIN i HEX

0

Witam serdecznie, mam za zadanie napisać prosty programik do zmiany podanego nr IP na system binarny i dziesiątkowy. Nie wiam jak przekonwertować ip, aby było w notacji kropkowej i było np. w postaci binarnej. Mógłby ktoś podsunąć mi jakieś wskazówki?

Oto aktualny kod programu:

#include <iostream>
#include <netdb.h>
#include <arpa/inet.h>


using namespace std;

int main(int argc, char **argv) {

   struct hostent *phe;

   if(argc < 2) {
     cout << "Sposob uzycia: " << argv[0] << " <numer_ip>" << endl;
     return 0;
   }

   if((phe = gethostbyname(argv[1])) == NULL) {
     cout << "Bledny nr IP: " << argv[1] << endl;
   }

   cout << phe->h_name << endl;
   cout << inet_ntoa(*(struct in_addr *)phe->h_addr)  << endl;
}
0

Rozumiem że adres IP przysyłasz jako tablice char? W takim razie potnij ten adres w miejscach kropek. Zamień kawałki na stringi. Użyj klasy stringstream żeby zamienić te kawałki na liczby int a potem użyj manipulatorów bin i hex z cout. (cout<<hex<<liczba)

0

Przyda się to:

#include <string>
#include <sstream>

using namespace std;

typedef unsigned ipv4;

bool TryStrToIp(const string &str, ipv4 &ip) 
{
   unsigned part;
   ipv4 result = 0;
   istringstream input(str);
   for(int i = 0;;)
   {
      input >> part;
      if(part > 255) return false;
      (result <<= 8) |= part;
      if(++i == 4) 
      {
         if(input.fail()) return false;
         ip = result; 
         return true; 
      }
      if(input.get() != '.') return false;
   }
}

string IpToStr(ipv4 ip) 
{
   ostringstream result;
   for(int i = 3;;)
   {
      result << (int)(((unsigned char*)&ip)[i]);
      if(i-- == 0) return result.str();
      result << '.';
   }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1