Ruby:将整数转换为32位二进制数(或字符串)

时间:2018-07-03 14:13:03

标签: ruby binary integer

我想将一个数字,例如1转换为一个32位二进制数字:

00000000000000000000000000000001  

无论数字多么小,如何确保整个字符串的长度为32

我有一个sprintf用于8位二进制文​​件,但不确定如何制作它32

3 个答案:

答案 0 :(得分:5)

String#%(通过sprintf):

'%032b' % 7
=> "00000000000000000000000000000111"

答案 1 :(得分:4)

使用String#rjust

1.to_s(2).rjust(32, '0')
#⇒ "00000000000000000000000000000001"

答案 2 :(得分:-1)

使用packunpack1

[1].pack('L>').unpack1('B*')
#=> "00000000000000000000000000000001"

L表示32位无符号整数,>表示大端。 B表示位字符串,*输出所有可用位。

当超过32位无符号整数范围时,它将环绕:

[4_294_967_294].pack('L>').unpack1('B*') #=> "11111111111111111111111111111110"
[4_294_967_295].pack('L>').unpack1('B*') #=> "11111111111111111111111111111111"
[4_294_967_296].pack('L>').unpack1('B*') #=> "00000000000000000000000000000000"
[4_294_967_297].pack('L>').unpack1('B*') #=> "00000000000000000000000000000001"