JavaFree.org | RubyOnBr.org

Convertendo IPv4 (4 bytes) pra inteiro

Acompanhar Convertendo IPv4 (4 bytes) pra inteiro 10 posts, 5 participantes

Avatar Shairon Toledo 1428 posts

Mais pimenta!!

Um endereço IPv4 é composto por 4 bytes com o formato A.B.C.D (192.168.0.1), A=192, B=128, C=0 e D=1.

Tem-se a necessidade de transformar esses 4 bytes em um inteiro, com a formula.

Portanto para o IP 192.168.0.1 temos

Pingando o número temos


shairon@hashcode:/junk# ping 3232235521
PING 3232235521 (192.168.0.1) 56(84) bytes of data.

Passo-a-passo de uma solução grossa

Separando os valores.

Invertendo para facilitar o cálculo

Pegando os elementos com os índices

Declarando e somando. Atribuição da soma em r, v convertido para inteiro, que multiplica 256 elevado ao índice i.

Por fim o método convert_ip

Testando…

Use o ping para testar o valor. Nossa r=0 ? Que feio!!

A alma da solução pede…

Refector Me!!

 
252944301_5b97e49932_t herval 275 posts

nossa mae, esse metodo ta parecendo perl… ;-)

como eu sou cheater, eu vou pelo codigo dos outros:

hehehehe

 
Avatar Shairon Toledo 1428 posts

Aì não vale :) , vcs acham os códigos ocultos … :). Boa essa, não conhecia. Algoritmo?

 
Avatar Bernardo Rufino 24 posts

Ok, ok, ficou bastante feio em uma linha só.

Muito boa essa seção aqui, seria legal tb se colocassem testes para verificar se o código refatorado tb funciona :)

 
Avatar Shairon Toledo 1428 posts

POW, POW, POW!!!

ou

 
Avatar Rodrigo Rosauro 310 posts
 
Avatar Rodrigo Rosauro 310 posts

não ficou one liner, mas fica legível ;)

 
Avatar Mereghost 1476 posts

Shairon:

Estava brincando ontem exatamente com o pack e o unpack. Só, como sou lerdo, não consegui, me irritei e fui tomar uma tubaína. =P

 
Avatar Shairon Toledo 1428 posts

fui tomar uma tubaína

Vai mijar corante hahaahh :)

 
Avatar Shairon Toledo 1428 posts

não ficou one liner

Nem sempre as soluções one liner(ou POW) são as melhores.

No caso lá em cima do Bernardo, eu não usaria ; apenas pra fazer em uma linha. No último código que postei faço apenas uso de métodos/classes da lib-core da Ruby, eu não uso isso quando utilizo API externas, fica muito complexo o código, se passar 2 meses sem ver o código fico perdido… :)