Ruby:unpack(" C")实际上做了什么?

时间:2016-11-21 16:24:08

标签: ruby pack

从文档中unpack执行:

  

根据格式解码str(可能包含二进制数据)   string,返回每个提取值的数组。

"C"格式表示8-bit unsigned (unsigned char)

但这实际上最终对我输入的字符串做了什么?结果意味着什么,如果我必须手工完成,我将如何去做呢?

2 个答案:

答案 0 :(得分:4)

它将每个后续char转换为它的整数序数String#ord。那就是说,

string.unpack 'C*'

完全等效
string.each_char.map(&:ord)

答案 1 :(得分:3)

  

但这实际上最终会对我输入的字符串做什么

它对输入没有任何作用。输入在这里不是真正的字符串。它被键入为字符串,但它实际上是二进制数据的缓冲区,例如您可能通过网络接收,并且您的目标是将该数据提取为整数数组。例如:

s = "\01\00\02\03"
arr = s.unpack("C*")
p(arr) # [1,0,2,3]

“字符串”作为 text 的字符串将毫无意义,但它作为数据缓冲区非常可行。解压缩它可以检查数据。