如何将5位二进制字符串转换为字母字符?

时间:2011-02-20 20:50:21

标签: ruby encoding

如果我有一个5位二进制字符串,例如'01010',我该如何将其转换为相应的字母字符?

'00000' - > 'a' .. '11111' - > 'F'

我这样做是为了将一大组布尔值压缩为一个字符串,该字符串只能包含字母字符[a-zA-Z]。

3 个答案:

答案 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

我可以用额外的布尔值填充布尔数组,因为在我的程序中,我确切知道有多少布尔值,所以我可以截断解码数组。