Ruby:unpack(“ C”)实际做什么?

Cis*_*tin 0 ruby pack

从文档中unpack执行:

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

"C"格式手段8-bit unsigned (unsigned char)

但是,这实际上对我输入的字符串做了什么呢?结果是什么意思,如果我必须手动操作,我将如何去做呢?

Ale*_*kin 5

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

string.unpack 'C*'
Run Code Online (Sandbox Code Playgroud)

完全等于

string.each_char.map(&:ord)
Run Code Online (Sandbox Code Playgroud)


mat*_*att 5

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

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

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

该“字符串”作为文本字符串毫无意义,但作为数据缓冲区却非常可行。打开它可以让您检查数据。