string.unpack如何在Ruby中工作?

时间:2008-09-25 07:01:06

标签: ruby

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

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

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

3 个答案:

答案 0 :(得分:9)

不是16 - 它显示1然后是6. h给出每个半字节的十六进制值,所以你得到0110(6),然后是0001(1),这取决于它是高位还是低位你是看着。首先使用高半字节然后得到61,这是97的十六进制 - 'a'的值

答案 1 :(得分:6)

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

  

解码str(可能包含二进制文件)   data)根据格式字符串,   返回每个值的数组   提取。格式字符串包含   一系列单字符   指令,见表22.8   在第379页。每个指令可能是   接下来是一个数字,表明了   用这个重复的次数   指示。星号(“*”)将   用完所有剩余的元素。该   指令sSiIlL可以各自遵循   用下划线(“_”)来表示   底层平台的原生大小   指定的类型;否则,它使用   与平台无关的一致性   尺寸。格式中将忽略空格   串。另请参见第#上的Array#pack   286。

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

  

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

     

h从每个字符中提取十六进制半字节(最不重要的字符)。

答案 2 :(得分:2)

char a的十六进制代码是61。

模板h2是十六进制字符串(低nybble优先),H2与高半字节相同。

另见perl documentation