Domanda su numeri binary

dunque sto scrivendo un programma che dato un ipv4 in formato
x1,x2,x3,x4/y
mi calcola i vari ip di network,broad etc etc e poi confronta con altri
ip e verifica se i 2 stanno sulla stessa rete, numero max di host etcetc
(me lo sto facendo da solo perchè mi serve da ripassone per l’esame
cisco)

il mio problema sta in preso che ne so un @x1=192 faccio @x1.to_s(2) e
me lo trasformo in “11000000”.
per riportarlo a decimale mi son scritto un loop tipo:

decimale_x1 = 0
x=0
@x1.reverse.each_char do |binario|
decimale_x1 += binario.to_i * (2 ** x)
x+=1
end
@x1=decimale_x1

sono costretto a fare cio probabilmente o perchè non ho capito come
usare i numeri binari in ruby o perchè non trovo un metodo gia scritto
ad hoc nella classe string.
essendo che mi perdo ancora nello spulciare le classi built in qualcuno
cortesemente potrebbe darmi na dritta?
mmm rileggendo forse non sono stato propio chiarissimo nell’esposizione
del problema, in ogni caso tagliando la testa al toro: se esiste un
metodo
che da decimale mi trova una stringa/binario <-(to_s(2)->, esiste un
metodo bult in che fa il contrario?

Il giorno 15 marzo 2011 11:53, Gennaro FFFF [email protected] ha
scritto:

ad hoc nella classe string.
essendo che mi perdo ancora nello spulciare le classi built in qualcuno
cortesemente potrebbe darmi na dritta?
mmm rileggendo forse non sono stato propio chiarissimo nell’esposizione
del problema, in ogni caso tagliando la testa al toro: se esiste un
metodo
che da decimale mi trova una stringa/binario <-(to_s(2)->, esiste un
metodo bult in che fa il contrario?

Usi il metodo to_i(base) della classe String
base la base numerica nella quale espresso il valore nella stringa.

esempio:
irb(main):001:0> d=192
irb(main):003:0> b=d.to_s(2)
=> “11000000”
irb(main):006:0> b.to_i(2)
=> 192

Giovanni

grazie della pronta risposta e dell’aiuto Giovanni.

2011/3/15 Luigi P. [email protected]

Il giorno 15/mar/2011, alle ore 11.53, Gennaro FFFF ha scritto:

del problema, in ogni caso tagliando la testa al toro: se esiste un
metodo
che da decimale mi trova una stringa/binario <-(to_s(2)->, esiste un
metodo bult in che fa il contrario?

to_i

Quasi:

‘00110’.to_i
=> 110
0b00110.to_i
=> 6

In pratica ruby supporta numeri binari ma solo a livello di literals. Si
puo’ fare una cosa come:

my_b = ‘0b00110’
=> “0b00110”
(eval my_b).to_i
=> 6

che fornisce un risultato corretto pur essendo quantomeno sgradevole.
Sono
sicuro che esiste qualcosa di meglio ma non mi viene in mente!

Piuttosto, visto che ruby supporta gli operatori bitwise, perche’ non
fare
del tutto a meno della rappresentazione binaria?

Ciao