IP to Int

0

Witajcie!! :)
Mam tylko jedno male pytanie .. jak mozna z C++ Builderze zrobic konwersje adresu IP do Int?? Z gory dziekuje za jakiekolwiek pomysly :)

0

Chodzi Ci o cos takiego

192.168.0.1 -> 19216801 ??

bo jezeli tak to to sie na int nie zmiesci...

1

Ekhem... Niby dlaczego mialo by sie niezmiescic ?
Pomyslmy chwile:
Adres IPv4 ma 4 "pola" o wartosciach od 0 do 255, czyli o wartosciach takich samych jak unsigned char. Unsigned Char ma 8 bitow wielkosci. 4 * 8 = 32. Int, czy tam unsigned int, jak kto chce, bez roznicy, ma 32 bity wielkosci, czyli dokladnie tyle ile adres IP.

Ofc jesli piszesz pod cokolwiek co uwaza ze int ma 16 bitow a nie 32, to musisz long inta uzyc. Ale z tresci pytania jasno wynika ze mowa o BC++B, wiec nie ma problemu.

dobra ale odpowiadajac na pytanie:
najprosciej uzyc

 unsigned long int inet_addr(const char *cp);

przykladowe uzycie:

unsigned int ip = inet_addr( "192.168.0.1" );

ew jesli masz ip w tablicy 4rech charow, tyo mozna zrobic tak:

unsigned char ips[ 4 ] = { 192, 168, 0, 1 };
unsigned int ip = *(unsigned char*)ips;

[dopisane] hehe zdaaaarza sie

0

ipv4 (bo o takim chyba mowa) jest w formacie x.x.x.x gdzie każdy x to to liczba z zakresu 0-255, czyli jeden bajt. int to 4 bajty a w ip masz 4 "wartosci" miedzy kropkami, które musisz wcisnąć do inta. Resztę sam opracuj :-)

[dopisane]
Gynvael aleś Ty szybki ;-)

0

Ok rzeczywiscie w BC++B int jest reprezentowany na 4 bajtach...
nie wiem dlaczego ale sie mnie pomylilo... moze zbyt pozna pora :)
nie mniej jednak shame on me i sorry za wprowadzenie w blad

pozdrawiam

0

Napisalem cos takiego .. ale pewnosci dzialania tego nie jestem .. mozecie na to looknac i ocenic ? :)

int TForm1::StrToIP(AnsiString adres)
{
TStringList *n=new TStringList;
n=tokens(adres,'.');
char a;
a=StrToInt(n->Strings[0])+StrToInt(n->Strings[1])+StrToInt(n->Strings[2])+StrToInt(n->Strings[3]);
int wynik=a;
return wynik;
}

:D

0

To chyba nie ma sensu. Ładujesz adres IP do zmiennej typu char, która jest jednobajtowa i w dodatku wykonujesz proste dodawanie. Jak już to zrób tak:

unsigned char bufor[4];
for (int n = 0; n<=3; n++) {
bufor[n] = StrToInt(n->Strings[n]);
};
unsigned __int32 *ptr_wynik = bufor;
return (*ptr_wynik);

Piszę "z pamięci", ale chyba jest dobrze. Kwestia tylko w jakiej kolejności powinny być liczby adresu w zmiennej int.

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