Je voudrais construire une chaîne à partir d'une valeur d'octet.
J'utilise actuellement:
str = " "
str[0] = byte
Cela semble fonctionner correctement mais je le trouve moche et pas très évolutif pour les chaînes de plus d'un caractère.
Une idée?
Il existe une approche beaucoup plus simple que toutes les solutions ci-dessus: Array # pack :
>> [65,66,67,68,69].pack('c*')
=> "ABCDE"
Je crois que pack est implémenté en c dans matz Ruby, il sera donc également beaucoup plus rapide avec de très grands tableaux.
De plus, le pack peut gérer correctement UTF-8 en utilisant le modèle 'U *'.
pour 1.9 vous avez besoin de:
[195,164].pack('c*').force_encoding('UTF-8')
ne me souviens pas s'il y a une seule fonction qui fait ça:
>> a = [65,66,67]
=> [65, 66, 67]
>> a.map {|x| x.chr}.join
=> "ABC"
Si les octets sont un tableau de Fixnum, vous pouvez essayer ceci:
bytes.map {|num| num.chr}.join
ou ca:
s = ''
bytes.each {|i| s << i}