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