代码之家  ›  专栏  ›  技术社区  ›  Ingrid

在Ruby中,string.unpack是如何工作的?

  •  12
  • Ingrid  · 技术社区  · 16 年前

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

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

    二进制,“A”=0110 0001。我不知道“h2”如何变为16(0001 0000)或“h2”如何变为61(0011 1101)。

    3 回复  |  直到 9 年前
        1
  •  9
  •   Amin    9 年前

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

        2
  •  6
  •   T.J. Schuck    9 年前

    查看编程Ruby reference 打开包装。下面是一个片段:

    解码str(它可能包含二进制 数据)根据格式字符串, 返回每个值的数组 提取。格式字符串由 单字符序列的 指令,见表22.8 在第379页。每个指令可以是 后跟一个数字,表示 重复此操作的次数 指令。星号(“*”)将 用完所有剩余的元素。这个 可遵循指令S。 通过下划线(“uuuu”)使用 基础平台的本机大小 指定的类型;否则,它使用 平台独立一致性 尺寸。在格式中忽略空格 字符串。另请参见第页的数组包 286。

    以及示例中的相关字符:

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

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

        3
  •  2
  •   Joe Holloway    16 年前

    字符的十六进制代码 a 是61。

    模板 h2 是一个十六进制字符串(低NYBOLL优先) H2 先高咬也是一样。

    也看到 perl documentation .