44

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

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

str = " "
str[0] = byte

これは問題なく動作するように見えますが、見苦しく、1 文字を超える文字列にはあまり拡張できません。

何か案が?

4

5 に答える 5

68

上記の方法よりもはるかに簡単な方法があります: Array#pack :

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

pack は matz ruby​​ の c で実装されていると思いますので、非常に大きな配列でもかなり高速になります。

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

于 2009-06-07T02:33:07.457 に答える
21

1.9 の場合、以下が必要です。

[195,164].pack('c*').force_encoding('UTF-8')
于 2011-01-15T20:26:31.940 に答える
10

それを行う単一の関数があるかどうか思い出せません:

>> a = [65,66,67]
=> [65, 66, 67]
>> a.map {|x| x.chr}.join
=> "ABC"
于 2009-06-06T23:02:33.483 に答える
4

bytes が Fixnum の配列である場合、これを試すことができます:

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

またはこれ:

s = ''
bytes.each {|i| s << i}
于 2009-06-06T22:51:11.807 に答える
0

これは OP の質問ではありませんが、(配列ではなく) 1 バイトしかなく、それから文字列を作成したい場合は、次を使用します。chr

c = 65
=> 65
c.chr
=> "A"
c.chr.class
=> String
于 2020-11-18T17:37:57.280 に答える