![](/img/trans.png)
[英]How to increment the number in a string while keeping the appropriate trailing/leading zeros
[英]Convert integer to binary string, padded with leading zeros
我想创建新的方法Integer#to_bin将十进制转换为二进制字符串。 #to_bin的参数是位数。 结果应该用前导零填充,以使其具有那么多的数字。
例:
1.to_bin(4)
#=> "0001"
1.to_bin(3)
#=> "001"
1.to_bin(2)
#=> "01"
7.to_bin(1)
#=> nil
7.to_bin
#=> "111"
etс.
我试过的
class Integer
def to_bin(number=nil)
if number == nil
return self.to_s(2)
else
s = self.to_s(2).size
e = number-s
one = '0'
two = '00'
three = '000'
if e==one.size
one+self.to_s(2)
elsif e==two.size
two+self.to_s(2)
elsif e==three.size
three+self.to_s(2)
end
end
end
end
如何将整数转换为以前导零填充的二进制字符串?
适当的方法是使用内核的sprintf
格式:
'%03b' % 1 # => "001"
'%03b' % 2 # => "010"
'%03b' % 7 # => "111"
'%08b' % 1 # => "00000001"
'%08b' % 2 # => "00000010"
'%08b' % 7 # => "00000111"
但是,等等,还有更多!:
'%0*b' % [3, 1] # => "001"
'%0*b' % [3, 2] # => "010"
'%0*b' % [3, 7] # => "111"
'%0*b' % [8, 1] # => "00000001"
'%0*b' % [8, 2] # => "00000010"
'%0*b' % [8, 7] # => "00000111"
因此,定义扩展Fixnum或Integer的方法非常容易且干净:
class Integer
def to_bin(width)
'%0*b' % [width, self]
end
end
1.to_bin(8) # => "00000001"
0x55.to_bin(8) # => "01010101"
0xaaa.to_bin(16) # => "0000101010101010"
Ruby已经具有将数字转换为二进制的内置机制: #to_s
接受要转换为的基数。
30.to_s(2) # => "11110"
如果要用零左键填充它:
30.to_s(2).rjust(10, "0") => "0000011110"
您可以将其扩展为结合了两者的小方法:
class Fixnum
def to_bin(width = 1)
to_s(2).rjust(width, "0")
end
end
> 1234.to_bin
=> "10011010010"
> 1234.to_bin(20)
=> "00000000010011010010"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.