Konwersja wadliwego IP do longa

Konwersja wadliwego IP do longa
0

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

Koziołek
Moderator
  • Rejestracja:około 18 lat
  • Ostatnio:5 dni
  • Lokalizacja:Stacktrace
  • Postów:6822
0

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

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

Pewno wyjdzie 0.


Sięgam tam, gdzie wzrok nie sięga… a tam NullPointerException
lemmiwink
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 12 lat
0

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

Koziołek
Moderator
  • Rejestracja:około 18 lat
  • Ostatnio:5 dni
  • Lokalizacja:Stacktrace
  • Postów:6822
0

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


Sięgam tam, gdzie wzrok nie sięga… a tam NullPointerException
lemmiwink
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 12 lat
0

short wystarczy:

Kopiuj
((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.

lemmiwink
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 12 lat
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).

lemmiwink
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 12 lat
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.

lemmiwink
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 12 lat
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.

lemmiwink
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 12 lat
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.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.