我想從一個字節值構建一個字符串。Ruby:從字節創建一個字符串
我目前使用的:
str = " "
str[0] = byte
這似乎很好地工作,但我覺得它醜,而不是非常擴展到字符串長度超過1個字符長。
有什麼想法?
我想從一個字節值構建一個字符串。Ruby:從字節創建一個字符串
我目前使用的:
str = " "
str[0] = byte
這似乎很好地工作,但我覺得它醜,而不是非常擴展到字符串長度超過1個字符長。
有什麼想法?
有一個比上述任何一個更簡單的方法:Array#pack:
>> [65,66,67,68,69].pack('c*')
=> "ABCDE"
我相信pack是在matz ruby中的c中實現的,所以它在使用非常大的數組時也會快得多。
此外,pack可以使用'U *'模板正確處理UTF-8。
如果字節是Fixnum對象的數組,你可以試試這個:
bytes.map {|num| num.chr}.join
或本:
s = ''
bytes.each {|i| s << i}
不記得是否有一個函數,它是:
>> a = [65,66,67]
=> [65, 66, 67]
>> a.map {|x| x.chr}.join
=> "ABC"
爲1.9,您需要:
[195,164].pack('c*').force_encoding('UTF-8')
不錯,不知道該CHR方法 – 2009-06-07 00:07:34
@VincentRobert你怎麼能/你能在風格做到這一點的例子嗎? `[195,164] .pack('c *')。force_encoding('UTF-8')' – 2012-08-06 03:30:53
明白了:`[195,164] .map {| x | x.chr} .join.force_encoding('UTF-8')` – 2012-08-06 03:31:48