string.unpack如何在Ruby中工作?
时间:2020-03-06 14:42:25 来源:igfitidea点击:
有人可以解释为什么接下来的解压缩结果是如何计算的吗?
"aaa".unpack('h2H2') #=> ["16", "61"]
在二进制中," a" = 01100001. 我不确定" h2"如何变为16(0001 0000)或者" H2"如何变为61(0011 1101)。
解决方案
查看关于解压缩的Ruby编程参考。这是一个片段:
Decodes str (which may contain binary data) according to the format string, returning an array of each value extracted. The format string consists of a sequence of single-character directives, summarized in Table 22.8 on page 379. Each directive may be followed by a number, indicating the number of times to repeat with this directive. An asterisk ("*") will use up all remaining elements. The directives sSiIlL may each be followed by an underscore ("_") to use the underlying platform's native size for the specified type; otherwise, it uses a platform-independent consistent size. Spaces are ignored in the format string. See also Array#pack on page 286.
以及我们示例中的相关字符:
H Extract hex nibbles from each character (most significant first). h Extract hex nibbles from each character (least significant first).
chara
的十六进制代码为61.
模板" h2"是一个十六进制字符串(低半字节在前)," H2"与高半字节在前一样。
另请参见perl文档。
不是16,它显示1,然后显示6. h给出每个半字节的十六进制值,因此我们将得到0110(6),然后是0001(1),具体取决于我们要查看的是高位还是低位。首先使用高半字节,我们将得到61,即97的十六进制值,即" a"的值