Как преобразовать строку или целое число к двоичному файлу в Ruby?

Как Вы создаете целые числа 0.. 9 и математические операторы + - * / в к двоичным строкам. Например:

 0 = 0000,
 1 = 0001, 
 ...
 9 = 1001

Существует ли способ сделать это с Ruby 1.8.6, не пользуясь библиотекой?

160
задан Morgan 3 July 2012 в 16:33
поделиться

3 ответа

Вам доступны Integer # to_s (base) и String # to_i (base) .

Целое число # to_s (основание) преобразует десятичное число в строку, представляющую число в указанной базе:

9.to_s(2) #=> "1001"

, в то время как обратное получается с помощью Строка # to_i (основание) :

"1001".to_i(2) #=> 9
​​
358
ответ дан 23 November 2019 в 21:29
поделиться

Если вы работаете только с однозначными цифрами 0–9, скорее всего, будет быстрее построить таблицу поиска, так что вам не придется каждый раз вызывать функции преобразования.

lookup_table = Hash.new
(0..9).each {|x|
    lookup_table[x] = x.to_s(2)
    lookup_table[x.to_s] = x.to_s(2)
}
lookup_table[5]
=> "101"
lookup_table["8"]
=> "1000"

Индексирование в эту хеш-таблицу с использованием целочисленного или строкового представления числа приведет к его двоичному представлению в виде строки.

Если вам требуется, чтобы двоичные строки состояли из определенного количества цифр (сохраняйте ведущие нули), измените x.to_s (2) на sprintf "% 04b", x (где 4 - минимальное количество цифр для использования).

4
ответ дан 23 November 2019 в 21:29
поделиться

Подхватывая идею bta о таблице поиска, вы можете создать таблицу поиска с помощью блока. Значения генерируются при первом обращении к ним и сохраняются на потом:

>> lookup_table = Hash.new { |h, i| h[i] = i.to_s(2) }
=> {}
>> lookup_table[1]
=> "1"
>> lookup_table[2]
=> "10"
>> lookup_table[20]
=> "10100"
>> lookup_table[200]
=> "11001000"
>> lookup_table
=> {1=>"1", 200=>"11001000", 2=>"10", 20=>"10100"}
20
ответ дан 23 November 2019 в 21:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: