有人可以解释为什么如何计算以下解压缩的结果?
"aaa".unpack('h2H2') #=> ["16", "61"]
在二进制中,'a'= 0110 0001.我不确定'h2'如何变为16(0001 0000)或'H2'变为61(0011 1101).
不是16 - 它显示1然后是6. h给出每个半字节的十六进制值,所以你得到0110(6),然后是0001(1),这取决于你看到的是高位还是低位.首先使用高半字节然后得到61,这是97的十六进制 - 'a'的值
在unpack上查看Programming Ruby 参考.这是一个片段:
根据格式字符串解码str(可能包含二进制数据),返回提取的每个值的数组.格式字符串由一系列单字符指令组成,在表29.8(第379页)中进行了总结.每个指令后面都可以跟一个数字,表示使用此指令重复的次数.星号("*")将耗尽所有剩余元素.指令sSiIlL可以后面跟一个下划线("_"),以使用底层平台的指定类型的本机大小; 否则,它使用与平台无关的一致大小.格式字符串中将忽略空格.另请参见Array#pack(第286页).
以及您示例中的相关字符:
H从每个字符中提取十六进制半字节(最重要的是第一个).
h从每个字符中提取十六进制半字节(最不重要的第一个).