web-dev-qa-db-ja.com

Ruby:バイトから文字列を作成する

バイト値から文字列を作成したいと思います。

私は現在使用しています:

str = " "
str[0] = byte

これは正常に動作するように見えますが、醜く、1文字より長い文字列にはあまり拡張性がありません。

何か案が?

40
Vincent Robert

上記のどれよりもはるかに単純なアプローチがあります: Array#pack

>> [65,66,67,68,69].pack('c*')
=>  "ABCDE"

Packはmatz Rubyのcで実装されていると思います。そのため、非常に大きな配列でもかなり高速になります。

また、packは 'U *'テンプレートを使用してUTF-8を正しく処理できます。

61
Jason Watkins

1.9の場合:

[195,164].pack('c*').force_encoding('UTF-8')
19
grosser

それを行う単一の関数があるかどうか覚えていない:

>> a = [65,66,67]
=> [65, 66, 67]
>> a.map {|x| x.chr}.join
=> "ABC"
8
nonopolarity

バイトがFixnumの配列である場合、これを試すことができます。

bytes.map {|num| num.chr}.join

またはこれ:

s = ''
bytes.each {|i| s << i}
3
hyperlogic