首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将5位二进制字符串转换为字母字符?

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

Stack Overflow用户
提问于 2011-02-21 04:50:21
回答 3查看 2.2K关注 0票数 3

如果我有一个5位的二进制字符串,比如'01010',我如何将它转换成它对应的字母字符?

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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-02-21 04:56:00

代码语言:javascript
复制
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'
票数 3
EN

Stack Overflow用户

发布于 2011-02-21 04:57:46

用于通用字符集的版本

代码语言:javascript
复制
s = '00001'
code = s.to_i(2)
puts (?a.ord + code).chr  # => b
票数 3
EN

Stack Overflow用户

发布于 2011-02-21 05:42:14

下面是使用LBg's solution对布尔值进行编码和解码的完整代码

代码语言:javascript
复制
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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5059900

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档