【发布时间】:2016-02-11 02:36:58
【问题描述】:
我有 4 个字节的二进制数据(big-endian)要解压。如果它包含两个 2 字节的无符号整数值,这将很简单:
a, b = data.unpack("C>C>")
但是如果数据包含一个 3 字节值 (a) 后跟一个 1 字节值 (b) 怎么办? unpack 方法似乎无法处理除 8 位、16 位、32 位和 64 位整数以外的格式。这是我想出的:
a, b = data.unpack("L>XC") # "L>": unpack a 32-bit unsigned int (big-endian)
# "X": rewind (skip back) one byte
# "C": unpack an 8-bit unsigned int
a >>= 8 # drop the last (lowest) byte from a
(如果数据是 little-endian,则可以使用 a &= 0xFFFFFF 删除最后一个(最高)字节。)
有没有更优雅的方式来解压这些值?
【问题讨论】:
标签: ruby integer binary-data unpack