2014-12-05 5 views

ответ

6

двойной обратной косой черты, чтобы остановить Python интерпретировать его как специальный символ:

'\\x' 

или использовать необработанный строковый литерал:

r'\x' 

В обычных строк Python литералов, обратные косые сигнализировать о начале escape-последовательность и \x - это последовательность, которая определяет символы по их шестнадцатеричному значению байта.

Вы можете использовать строку форматирования вместо всех конкатенации здесь:

r'\x{0[0]}{0[1]}\x{0[2]}{0[3]}'.format(lstDES[100]) 

Если вы пытаетесь определить два байта на основе шестнадцатеричных значений из lstDES[100], то вам придется использовать другой подход; производя строку с символами \, x и две шестнадцатеричные цифры не будут магически вызывать ту же интерпретацию. Python использует для строковых литералов.

Вы бы использовать binascii.unhexlify() function для этого вместо:

import binascii 

a = binascii.unhexlify(''.join(lstDES[100][:4])) 
1

В Python \ используется, чтобы избежать символы, такие как \n для перевода строки или \t для язычка.

Чтобы иметь строку буква '\x', вам нужно использовать две обратные косые черты, чтобы эффективно избежать другой, поэтому она становится '\\x'.

In [199]: a = '\\x' 

In [200]: print(a) 
\x 
1

Вам нужно \\x потому что \, используемые для эвакуации символов:

>>> s='\\x'+'a' 
>>> print s 
\xa 
1

Попробуйте сделать сырец строку следующим образом:

a = r'\x'+''.join(lstDES[100][:2]) + r'\x'+''.join(lstDES[100][2:]) 
Смежные вопросы