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文档 。