有人可以解释为什么如何计算以下解压缩的结果?
"aaa".unpack('h2H2') #=> ["16", "61"]
在二进制中,'a'= 0110 0001.我不确定'h2'如何变为16(0001 0000)或'H2'变为61(0011 1101)。
答案 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)