【发布时间】:2008-09-25 07:01:06
【问题描述】:
有人可以解释为什么以下解包的结果是如何计算的吗?
"aaa".unpack('h2H2') #=> ["16", "61"]
在二进制中,“a”= 0110 0001。我不确定“h2”如何变为 16 (0001 0000) 或“H2”如何变为 61 (0011 1101)。
【问题讨论】:
标签: ruby
有人可以解释为什么以下解包的结果是如何计算的吗?
"aaa".unpack('h2H2') #=> ["16", "61"]
在二进制中,“a”= 0110 0001。我不确定“h2”如何变为 16 (0001 0000) 或“H2”如何变为 61 (0011 1101)。
【问题讨论】:
标签: ruby
不是 16 - 它显示 1,然后是 6。 h 给出每个半字节的十六进制值,所以你得到 0110 (6),然后是 0001 (1),这取决于它是高位还是低位看着。首先使用高半字节,你会得到 61,这是 97 的十六进制 - 'a' 的值
【讨论】:
在 unpack 上查看 Programming Ruby reference。这是一个sn-p:
解码str(可能包含二进制 数据)根据格式字符串, 返回每个值的数组 提取。格式字符串包括 单字符序列的 指令,总结在表 22.8 在第 379 页上。每个指令可能是 后跟一个数字,表示 重复的次数 指示。星号 ("*") 将 用完所有剩余的元素。这 可以遵循每个指令 通过下划线 ("_") 使用 底层平台的原生大小 指明的类型;否则,它使用 独立于平台的一致 尺寸。空格在格式中被忽略 细绳。另请参阅页面上的 Array#pack 286.
以及您示例中的相关字符:
H 从每个字符中提取十六进制半字节(最重要的在前)。
h 从每个字符中提取十六进制半字节(最不重要的在前)。
【讨论】:
【讨论】: