我想将一个数字,例如1
转换为一个32
位二进制数字:
00000000000000000000000000000001
无论数字多么小,如何确保整个字符串的长度为32
?
我有一个sprintf
用于8
位二进制文件,但不确定如何制作它32
。
答案 0 :(得分:5)
String#%
(通过sprintf
):
'%032b' % 7
=> "00000000000000000000000000000111"
答案 1 :(得分:4)
使用String#rjust
:
1.to_s(2).rjust(32, '0')
#⇒ "00000000000000000000000000000001"
答案 2 :(得分:-1)
[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"