将 str 'A123456' 转换为 python 中的字节 b'\x0A\x12\x34\x56'

convert str 'A123456' to bytes b'\x0A\x12\x34\x56' in python

我使用 python 2.7 和 windows。

我想将字符串'A123456'转换为字节:b'\x0A\x12\x34\x56',然后将其与其他字节(b'\xBB')连接到b'\xbb\x0A\x12\x34\x56'。

也就是我想从string'A123456'和b'\xBB'

中得到b'\xbb\x0A\x12\x34\x56'

这对 binascii.unhexlify 来说并不难,唯一的问题是当字符串的半字节数不是偶数时(unhexlify不接受长度为 7 的字符串)。

所以首先,最好制作一个快速的实用函数来执行此操作,因为高效地执行此操作并不是非常明显,并且您需要一个自我记录的名称:

def zeropad_even(s):
    # Adding one, then stripping low bit leaves even values unchanged, and rounds
    # up odd values to next even value
    return s.zfill(len(s) + 1 & ~1)

现在您所要做的就是在解开字符串之前用它来修复您的字符串:

>>> from binascii import unhexlify
>>> unhexlify(zeropad_even('A123456'))
'\n\x124V'
>>> _ == b'\x0A\x12\x34\x56'
True

我包括最后一个测试只是为了表明你得到了预期的结果; strrepr 尝试使用可打印的 ASCII 或可用的短转义符,因此只有 \x12 实际上最终出现在 repr 中; \x0A' 变为 \n\x34 变为 4\x56 变为 V,但这些都是拼写相同字节的等效方法。