【问题标题】:How does string.unpack work in Ruby?string.unpack 如何在 Ruby 中工作?
【发布时间】:2008-09-25 07:01:06
【问题描述】:

有人可以解释为什么以下解包的结果是如何计算的吗?

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

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

【问题讨论】:

    标签: ruby


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      在 unpack 上查看 Programming Ruby reference。这是一个sn-p:

      解码str(可能包含二进制 数据)根据格式字符串, 返回每个值的数组 提取。格式字符串包括 单字符序列的 指令,总结在表 22.8 在第 379 页上。每个指令可能是 后跟一个数字,表示 重复的次数 指示。星号 ("*") 将 用完所有剩余的元素。这 可以遵循每个指令 通过下划线 ("_") 使用 底层平台的原生大小 指明的类型;否则,它使用 独立于平台的一致 尺寸。空格在格式中被忽略 细绳。另请参阅页面上的 Array#pack 286.

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

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

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

      【讨论】:

        【解决方案3】:

        chara的十六进制码是61。

        模板h2是一个十六进制字符串(低位在前),H2同理,高位在前。

        另见perl documentation

        【讨论】:

          猜你喜欢
          • 2014-02-26
          • 2015-08-05
          • 2015-11-12
          • 2014-12-15
          • 2011-06-27
          • 2011-02-17
          • 1970-01-01
          • 2012-12-31
          • 2012-12-04
          相关资源
          最近更新 更多