バイト値から文字列を作成したいと思います。
私は現在使用しています:
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"
バイトがFixnumの配列である場合、これを試すことができます。
bytes.map {|num| num.chr}.join
またはこれ:
s = ''
bytes.each {|i| s << i}