Подтвердить что ты не робот

Ruby: создать строку из байтов

Я хотел бы построить строку из байтового значения.

В настоящее время я использую:

str = " "
str[0] = byte

Кажется, что это нормально, но я считаю его уродливым и не очень масштабируемым для строк длиной более 1 символа.

Любая идея?

4b9b3361

Ответ 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}