2009-06-06 38 views
36

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

我目前使用的:

str = " " 
str[0] = byte 

这似乎很好地工作,但我觉得它丑,而不是非常扩展到字符串长度超过1个字符长。

有什么想法?

回答

51

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

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

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

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

3

如果字节是Fixnum对象的数组,你可以试试这个:

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

或本:

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

不记得是否有一个函数,它是:

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

不错,不知道该CHR方法 – 2009-06-07 00:07:34

+0

@VincentRobert你怎么能/你能在风格做到这一点的例子吗? `[195,164] .pack('c *')。force_encoding('UTF-8')' – 2012-08-06 03:30:53

+0

明白了:`[195,164] .map {| x | x.chr} .join.force_encoding('UTF-8')` – 2012-08-06 03:31:48

15

为1.9,您需要:

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