2009-06-06 72 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')