我想从字节值构建一个字符串。
我目前使用:
str = " "
str[0] = byte
这似乎工作得很好,但我发现它很难看,而且对于超过1个字符的字符串也不是很容易扩展。
有什么想法吗?
答案 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