2011-05-12 17 views
9

Bir hex değerini bir ikili değere dönüştürmeye çalışıyorum (hex dizesindeki her bit eşdeğer dört bitlik bir ikili değere sahip olmalıdır). Bunu kullanmam tavsiye edildi: Bu bana doğru çıktı 000011111111 verirOnaltılı sayıyı rubese dönüştürmek

num = "0ff" # (say for eg.) 
bin = "%0#{num.size*4}b" % num.hex.to_i 

. Bunun nasıl çalıştığını, özellikle de %0#{num.size*4}b ile karıştırıyorum. Biri bunun için yardımcı olabilir mi?

Sen ( String#% için docs tarafından işaret edildiği gibi) Kernel#sprintf ait belgelerinde cevabını bulacaksınız

cevap

9

Ayrıca yapabilirsiniz:

num = "0ff" 
num.hex.to_s(2).rjust(num.size*4, '0') 

Sen olabilir zaten çözüldü, ancak, 0 ile çıktısını artırmak istediğiniz basamak sayısıdır, çünkü bir onaltılık basamak dört ile temsil edilir (log_2 1 6 = 4) ikili rakam.

+4

Veya daha genel olarak, "num.to_i (16) .to_s (2)" – Phrogz

İlgili konular