バイト値から文字列を作成したいと思います。
私は現在使用しています:
str = " "
str[0] = byte
これは問題なく動作するように見えますが、見苦しく、1 文字を超える文字列にはあまり拡張できません。
何か案が?
上記の方法よりもはるかに簡単な方法があります: Array#pack :
>> [65,66,67,68,69].pack('c*')
=> "ABCDE"
pack は matz ruby の c で実装されていると思いますので、非常に大きな配列でもかなり高速になります。
また、pack は「U*」テンプレートを使用して UTF-8 を正しく処理できます。
1.9 の場合、以下が必要です。
[195,164].pack('c*').force_encoding('UTF-8')
それを行う単一の関数があるかどうか思い出せません:
>> a = [65,66,67]
=> [65, 66, 67]
>> a.map {|x| x.chr}.join
=> "ABC"
bytes が Fixnum の配列である場合、これを試すことができます:
bytes.map {|num| num.chr}.join
またはこれ:
s = ''
bytes.each {|i| s << i}
これは OP の質問ではありませんが、(配列ではなく) 1 バイトしかなく、それから文字列を作成したい場合は、次を使用します。chr
c = 65
=> 65
c.chr
=> "A"
c.chr.class
=> String