From: jzakiya@... (Jabari Zakiya) Date: 2002-08-30T00:32:58+09:00 Subject: .bin & .b2h In "The Ruby Way" on p.80 Hal Fulton provides this String method for .bin, (to go along with .oct and .hex) [1.6.7] class String def bin val = self.strip pattern= /^([+-]?)(0b)?([01]+)(.*)$/ parts = pattern.match(val) return 0 if not parts sign = parts[1] num = parts[3] eval(sign + "0b" + num) end end These examples were given. a = "10011001".bin # 153 b = "0b10011001".bin # 153 c = "0B1001001".bin # 0 d = "nothing".bin # 0 e = "0b100121001".bin # 9 Here's a shorter version which produces the same output. class String def bin val = self.strip val[0,2] == "0b" ? val.oct : ("0b"+val).oct end end 1) Since "0B1010101".oct and "0b1010101.oct, produce the same output, shouldn't "0B"+val allow a valid conversion from binary to decimal also? Here's another pearl, er, ruby for your toolkit. I needed this to convert binary strings to hex strings. Example: "100110110101" => "9b5" class String def b2h val = self.strip sprintf("%x", (val[0,2] == "0b" ? val.oct : ("0b"+val).oct)) end end Here are some examples: "10101010101".b2h # "555" "0b111101001100".b2h # "f4c" "0B101010".b2h # "0" "182834".b2h # "1" 2) What's a better, more Rubyish, name for b2h, if any? Jabari Zakiya