我想从一个字节值构建一个字符串。
我目前使用:
str = " "
str[0] = byte
这似乎工作正常,但我发现它很难看,并且对于长度超过 1 个字符的字符串的扩展性不是很好。
任何的想法?
有一种比上述任何一种方法都简单得多的方法:Array#pack:
>> [65,66,67,68,69].pack('c*')
=> "ABCDE"
我相信 pack 是在 matz ruby 中用 c 实现的,因此对于非常大的数组,它也会相当快。
此外,pack 可以使用“U*”模板正确处理 UTF-8。
对于 1.9,您需要:
[195,164].pack('c*').force_encoding('UTF-8')
不记得是否有一个函数可以做到这一点:
>> a = [65,66,67]
=> [65, 66, 67]
>> a.map {|x| x.chr}.join
=> "ABC"
如果 bytes 是 Fixnum 的数组,你可以试试这个:
bytes.map {|num| num.chr}.join
或这个:
s = ''
bytes.each {|i| s << i}
这不是 OP 的问题,但是如果您只有一个字节(不在数组中)并且想从中创建一个字符串,请使用chr
c = 65
=> 65
c.chr
=> "A"
c.chr.class
=> String