преобразовать строку 'A123456' в байты b '\ x0A \ x12 \ x34 \ x56' в python - PullRequest
0 голосов
/ 09 ноября 2018

Я использую Python 2.7 и Windows.

Я хочу преобразовать строку 'A123456' в байты: b '\ x0A \ x12 \ x34 \ x56', а затем объединить ее с другими байтами (b '\ xBB') в b '\ xbb \ x0A \ x12 \ x34 \ x56' .

То есть я хочу получить b '\ xbb \ x0A \ x12 \ x34 \ x56' из строки 'A123456' и b '\ xBB'

1 Ответ

0 голосов
/ 09 ноября 2018

Это не так уж сложно сделать с 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

Я включил этот последний тест, чтобы показать, что вы получили ожидаемый результат; repr из str пытается использовать печатный ASCII или короткие экранированные символы, где это возможно, поэтому только \x12 фактически заканчивается в repr; \x0A' становится \n, \x34 - это 4, а \x56 - это V, но все это эквивалентные способы написания одних и тех же байтов.

...