Frage

Ich möchte eine Zeichenfolge aus einem Byte-Wert bauen.

ich zur Zeit verwenden:

str = " "
str[0] = byte

Das scheint gut zu funktionieren, aber ich finde es hässlich und nicht sehr skalierbar Strings länger als 1 Zeichen.

Jede Idee?

War es hilfreich?

Lösung

Es gibt eine viel einfachere Lösung als eine der oben genannten: Array # einpacken :

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

Ich glaube Pack in c in matz Rubin implementiert wird, so wird es auch wesentlich schneller mit sehr großem Arrays sein.

Auch kann Pack korrekt verarbeitet UTF-8 der 'U *' Vorlage.

Andere Tipps

für 1,9 benötigen Sie:

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

kann mich nicht erinnern, ob es eine einzige Funktion ist, die das tut:

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

Wenn Bytes ist ein Array von Fixnum die Sie dies versuchen könnte:

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

oder folgt aus:

s = ''
bytes.each {|i| s << i}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top