5

I know that I can use Fixnum#to_s to represent integers as strings in binary format. However 1.to_s(2) produces 1 and I want it to produce 00000001. How can I make all the returned strings have zeros as a fill up to the 8 character? I could use something like:

binary = "#{'0' * (8 - (1.to_s(2)).size)}#{1.to_s(2)}" if (1.to_s(2)).size < 8

but that doesn't seem very elegant.

Alexander Popov
  • 23,073
  • 19
  • 91
  • 130

3 Answers3

9

Use string format.

"%08b" % 1
# => "00000001"
sawa
  • 165,429
  • 45
  • 277
  • 381
8

Using String#rjust:

1.to_s(2).rjust(8, '0')
=> "00000001"
falsetru
  • 357,413
  • 63
  • 732
  • 636
4

Use the String#% method to format a string

 "%08d" % 1.to_s(2)
 # => "00000001" 

Here is a reference for different formatting options.

tihom
  • 7,923
  • 1
  • 25
  • 29