Konwersja wadliwego IP do longa

0

Hej!
Mam wadliwy adres IP np.300.300.300.233,jak szybko skonwertować to do longa??

0

Rozbijasz IP na składowe i dalej jako byte[] = bytes[4]:

return (long)((bytes[0] << 24) | (bytes[1] << 16) | (bytes[2] << 8) | bytes[3]);

Pewno wyjdzie 0.

0

trzeba to zrobić na short-ach, bo do byte'a można zapisać max 127

0

Wróć... na shortach też nie zrobisz... ten sam problem. Trzeba zrobić na BigIntiger :D

0

short wystarczy:

((long)shorts[0] << 48) | ((long)shorts[1] << 32) | (shorts[2] << 16) | shorts[3];
0

Tylko że jak się tak zrobi a adres będzie np. 0.0.1.5 to wynik będzie nieprawidłowy.

0

dlaczego wynik będzie nieprawidłowy?

0

Bo 1 na 3 oktecie to normalnie 256 a jak tą 1 przesuwasz o 16 bitów to wyjdzie (256^2).

0

Ale tutaj każda liczba będzie zapisana na każdych 16 bitach z longa:

0x 0000 0000 0001 0005

Oczywiście odczytanie takiego adresu musi być przeprowadzone w odpowiedni sposób.

0

Mógłbyś rozwinąć co to znaczy w odpowiedni sposób??Dla tego adresu powyżej 0.0.1.5 powinno wyjść 261 a wychodzi 65541.

0

dlaczego twierdzisz, że dla powyższego adresu ma wyjść 261?

0

Dobra,już mam,dzięki za pomoc:)

0
lemmiwink napisał(a)

trzeba to zrobić na short-ach, bo do byte'a można zapisać max 127

Jak sie bajty potraktuje jako bez znaku to sie zrobi bez problemu, i caly ip4 sie zmiesci w integer. Ty sie bawisz shiftowaniem bitow, Ty rzadzisz co one reprezentuja. Kwestia co chcesz z tym zrobic.

0

w javie nie ma typów unsigned

0

No co Ty powiesz. Ale jak bawisz sie bitami to mozesz sobie robic z byte co chcesz i interpretowac jak chcesz, grunt ze masz do dyspozycji 8 bitow. Poczytaj torche i pokoduj zanim zaczniesz dyskutowac.

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