Hej!
Mam wadliwy adres IP np.300.300.300.233,jak szybko skonwertować to do longa??
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.
trzeba to zrobić na short-ach, bo do byte'a można zapisać max 127
Wróć... na shortach też nie zrobisz... ten sam problem. Trzeba zrobić na BigIntiger :D
short wystarczy:
((long)shorts[0] << 48) | ((long)shorts[1] << 32) | (shorts[2] << 16) | shorts[3];
Tylko że jak się tak zrobi a adres będzie np. 0.0.1.5 to wynik będzie nieprawidłowy.
dlaczego wynik będzie nieprawidłowy?
Bo 1 na 3 oktecie to normalnie 256 a jak tą 1 przesuwasz o 16 bitów to wyjdzie (256^2).
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.
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.
dlaczego twierdzisz, że dla powyższego adresu ma wyjść 261?
Dobra,już mam,dzięki za pomoc:)
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.
w javie nie ma typów unsigned
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.