【发布时间】:2016-10-04 07:15:03
【问题描述】:
我有一个协议,该协议需要将二进制数据与十六进制编码字符串相互转换,其中低半字节(每个字节的低 4 位)首先出现 - 例如 Python 字符串 '\xab\xcd' 将是编码为“badc”。这种奇怪的格式来自 PHP/Perl 的 pack 和 unpack 函数以及 h* 格式(参见 http://php.net/manual/en/function.pack.php)。
显然binascii.hexlify() 等人无法做到这一点。我尝试使用struct 模块以及array byteswapping as suggested here 的各种格式,但无法使其正常工作。
我最终通过一些老式的杂耍来解决它:
def to_low_nibble_hex(value):
"""Convert a binary string to hex using low-nibble first encoding
"""
r = []
for c in value:
c = ord(c)
hb = (0x0f & c) << 4
lb = (0xf0 & c) >> 4
nc = chr(hb | lb)
r += [nc]
return binascii.hexlify(''.join(r))
这在我的情况下似乎效果很好,但我想知道是否有人可以提出更正式的方法。
【问题讨论】:
标签: python encoding hex binary-data packing