Ruby: создать строку из байтов
Я хотел бы построить строку из байтового значения.
В настоящее время я использую:
str = " "
str[0] = byte
Кажется, что это нормально, но я считаю его уродливым и не очень масштабируемым для строк длиной более 1 символа.
Любая идея?
Ответы
Ответ 1
Существует гораздо более простой подход, чем любой из перечисленных выше: Array # pack:
>> [65,66,67,68,69].pack('c*')
=> "ABCDE"
Я считаю, что пакет реализован в c в matz ruby, поэтому он также будет значительно быстрее с очень большими массивами.
Кроме того, пакет может корректно обрабатывать UTF-8 с использованием шаблона 'U *'.
Ответ 2
для 1.9 вам нужно:
[195,164].pack('c*').force_encoding('UTF-8')
Ответ 3
не помнит, есть ли одна функция, которая делает это:
>> a = [65,66,67]
=> [65, 66, 67]
>> a.map {|x| x.chr}.join
=> "ABC"
Ответ 4
Если байты представляют собой массив Fixnum, вы можете попробовать следующее:
bytes.map {|num| num.chr}.join
или это:
s = ''
bytes.each {|i| s << i}