我想从一个字节值构建一个字符串。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