如果我有一个5位的二进制字符串,比如'01010',我如何将它转换成它对应的字母字符?
('00000'->'a' ..'11111'->'F')
我这样做是为了将一大组布尔值压缩成一个只能包含字母字符a-zA-Z的字符串。
发布于 2011-02-21 04:56:00
letters = ('a'..'z').to_a + ('A'..'F').to_a
letters["00000".to_i(2)] # => 'a'
letters["11111".to_i(2)] # => 'F'
letters["01010".to_i(2)] # => 'k'发布于 2011-02-21 04:57:46
用于通用字符集的版本
s = '00001'
code = s.to_i(2)
puts (?a.ord + code).chr # => b发布于 2011-02-21 05:42:14
下面是使用LBg's solution对布尔值进行编码和解码的完整代码
class SomeClass
@@letters = (('a'..'z').to_a+('A'..'F').to_a)
def self.decode str
str.chars.map do |c|
c = @@letters.index(c).to_s(2)
while c.length < 5
c = "0#{c}"
end
c
end.join('').split('').map do |c|
if c == '1'
true
else
false
end
end
end
def self.encode *bools
str = ''
until bools.length == 0
five = ''
5.times do
five += bools.length > 0 ? (bools.shift() ? '1' : '0') : '0'
end
str += @@letters[five.to_i(2)]
end
str
end
end我可以用额外的布尔值填充布尔值数组,因为在我的程序中,我确切地知道我有多少布尔值,这样我就可以截断解码后的数组。
https://stackoverflow.com/questions/5059900
复制相似问题