Ruby:从字节创建一个String

时间:2009-06-06 22:45:25

标签: ruby string byte

我想从字节值构建一个字符串。

我目前使用:

str = " "
str[0] = byte

这似乎工作得很好,但我发现它很难看,而且对于超过1个字符的字符串也不是很容易扩展。

有什么想法吗?

5 个答案:

答案 0 :(得分:59)

有一种比上述任何方法更简单的方法:Array#pack

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

我相信pack是用matz ruby​​中的c实现的,所以对于非常大的数组,它也会快得多。

此外,pack可以使用'U *'模板正确处理UTF-8。

答案 1 :(得分:15)

你需要

1.9:

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

答案 2 :(得分:7)

不记得是否有单一功能可以做到这一点:

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

答案 3 :(得分:3)

如果bytes是Fixnum的数组,你可以试试这个:

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

或者这个:

s = ''
bytes.each {|i| s << i}

答案 4 :(得分:0)

这不是OP的问题,但是如果您只有一个字节(不在数组中)并且想要从中创建一个字符串,请使用chr

c = 65
=> 65
c.chr
=> "A"
c.chr.class
=> String