Ruby: преобразовать целое число в 32-битное двоичное число (или строку) - PullRequest
0 голосов
/ 03 июля 2018

Я хочу преобразовать число, скажем 1, в двоичное число 32 бит:

00000000000000000000000000000001  

как я могу это сделать, чтобы полная строка имела длину 32, независимо от того, насколько маленьким может быть число?

У меня был sprintf, работающий для 8 бинарного двоичного кода, но я не уверен, как это сделать 32.

Ответы [ 3 ]

0 голосов
/ 03 июля 2018

String#% (через sprintf):

'%032b' % 7
=> "00000000000000000000000000000111"
0 голосов
/ 03 июля 2018

Использование pack и unpack1:

[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"
0 голосов
/ 03 июля 2018

Использование String#rjust:

1.to_s(2).rjust(32, '0')
#⇒ "00000000000000000000000000000001"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...