mcm*_*ney 161 ruby binary encode
如何创建整数0..9和数学运算符+ - */in到二进制字符串.例如:
0 = 0000,
1 = 0001,
...
9 = 1001
Run Code Online (Sandbox Code Playgroud)
有没有办法在不使用库的情况下使用Ruby 1.8.6执行此操作?
Mik*_*use 359
你有Integer#to_s(base)并且String#to_i(base)可以使用.
Integer#to_s(base) 将十进制数转换为表示指定基数中的数字的字符串:
9.to_s(2) #=> "1001"
Run Code Online (Sandbox Code Playgroud)
而反向是通过以下方式获得的String#to_i(base):
"1001".to_i(2) #=> 9
Run Code Online (Sandbox Code Playgroud)
Ale*_*pov 41
我问了一个类似的问题.根据@sawa的回答,以二进制格式表示字符串中整数的最简洁方法是使用字符串格式化程序:
"%b" % 245
=> "11110101"
Run Code Online (Sandbox Code Playgroud)
您还可以选择字符串表示的长度,如果要比较固定宽度的二进制数,这可能很有用:
1.upto(10).each { |n| puts "%04b" % n }
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
Run Code Online (Sandbox Code Playgroud)
Mic*_*ohl 20
了解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"}
Run Code Online (Sandbox Code Playgroud)
joe*_*ews 11
你会自然地使用Integer#to_s(2),String#to_i(2)或"%b"在一个真正的程序,但是,如果你有兴趣的翻译是如何工作的,这种方法计算使用基本的运营商给定的整数的二进制表示:
def int_to_binary(x)
p = 0
two_p = 0
output = ""
while two_p * 2 <= x do
two_p = 2 ** p
output << ((two_p & x == two_p) ? "1" : "0")
p += 1
end
#Reverse output to match the endianness of %b
output.reverse
end
Run Code Online (Sandbox Code Playgroud)
要检查它的工作原理:
1.upto(1000) do |n|
built_in, custom = ("%b" % n), int_to_binary(n)
if built_in != custom
puts "I expected #{built_in} but got #{custom}!"
exit 1
end
puts custom
end
Run Code Online (Sandbox Code Playgroud)