string.unpack如何在Ruby中工作?

有人可以解释为什么如何计算以下解压缩的结果?

"aaa".unpack('h2H2') #=> ["16", "61"] 

在二进制中,’a’= 0110 0001.我不确定’h2’如何变为16(0001 0000)或’H2’变为61(0011 1101)。

不是16 – 它显示1然后6. h给出每个半字节的hex值,所以你得到0110(6),然后是0001(1),这取决于你正在查看它的高位还是低位。 首先使用高半字节,你得到61,这是97的hex – ‘a’的值

在unpack上查看Programming Ruby 参考 。 这是一个片段:

根据格式字符串解码str(可能包含二进制数据),返回提取的每个值的数组。 格式字符串由一系列单字符指令组成,如表22.8在379页中所述。每个指令后面都可以跟一个数字,表示使用该指令重复的次数。 星号(“*”)将耗尽所有剩余元素。 指令sSiIlL可以后面跟下划线(“_”),以使用底层平台的指定类型的本机大小; 否则,它使用与平台无关的一致大小。 格式字符串中将忽略空格。 另请参阅Array#pack(第286页)。

以及您示例中的相关字符:

H从每个字符中提取hex半字节(最重要的是第一个)。

h从每个字符中提取hex半字节(最不重要的第一个)。

char a的hex代码是61。

模板h2是hex字符串(首先是低nybble), H2与高半字节相同。

另请参阅perl文档 。