【发布时间】:2018-12-11 21:34:43
【问题描述】:
我想将一个数字(例如 1)转换为 32 位二进制数:
00000000000000000000000000000001
我怎样才能确保完整的字符串长度为32,不管数字有多小?
我有一个 sprintf 为 8 位二进制工作,但不知道如何使其成为 32。
【问题讨论】:
我想将一个数字(例如 1)转换为 32 位二进制数:
00000000000000000000000000000001
我怎样才能确保完整的字符串长度为32,不管数字有多小?
我有一个 sprintf 为 8 位二进制工作,但不知道如何使其成为 32。
【问题讨论】:
String#%(通过sprintf):
'%032b' % 7
=> "00000000000000000000000000000111"
【讨论】:
使用String#rjust:
1.to_s(2).rjust(32, '0')
#⇒ "00000000000000000000000000000001"
【讨论】:
[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"
【讨论】: