如果我有一个5位二进制字符串,例如'01010'
,我该如何将其转换为相应的字母字符?
('00000'
- > 'a'
.. '11111'
- > 'F'
)
我这样做是为了将一大组布尔值压缩为一个字符串,该字符串只能包含字母字符[a-zA-Z]。
答案 0 :(得分:3)
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'
答案 1 :(得分:3)
通用字符集的版本
s = '00001'
code = s.to_i(2)
puts (?a.ord + code).chr # => b
答案 2 :(得分:0)
以下是使用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
我可以用额外的布尔值填充布尔数组,因为在我的程序中,我确切知道有多少布尔值,所以我可以截断解码数组。