Python: ¿conversión de cadena binaria / hexadecimal?

Tengo una cadena que tiene caracteres binarios y de cadena y primero me gustaría convertirla a binario, luego a hexadecimal.

La cadena es la siguiente:

^Q"^Q^@^[)^G ^Q^A^S^A^V^@^Cd}^@N^@^@^A^@^@^@^@^@^@^@j 

¿Cómo hago para convertir esta cadena en Python para que la salida en formato hexadecimal sea similar a la siguiente?

 24208040901811001B12050809081223431235113245422F0A23000000000000000000001F 

Puedes usar ord y hex como este:

 >>> s = 'some string' >>> hex_chars = map(hex,map(ord,s)) >>> print hex_chars ['0x73', '0x6f', '0x6d', '0x65', '0x20', '0x73', '0x74', '0x72', '0x69', '0x6e', '0x67'] >>> hex_string = "".join(c[2:4] for c in hex_chars) >>> print hex_string 736f6d6520737472696e67 >>> 

O utilice la encoding incorporada:

 >>> s = 'some string' >>> print s.encode('hex_codec') 736f6d6520737472696e67 >>> 
 >>> import binascii >>> s = '2F' >>> hex_str = binascii.b2a_hex(s) >>> hex_str >>> '3246' 

O

 >>>import binascii >>> hex_str = binascii.hexlify(s) >>> hex_str >>> '3246' >>> 

Solución más rápida ver:

 from timeit import Timer import os import binascii def testSpeed(statement, setup = 'pass'): print '%s' % statement print '%s' % Timer(statement, setup).timeit() setup = """ import os value = os.urandom(32) """ # winner statement = """ import binascii binascii.hexlify(value) """ testSpeed(statement, setup) # loser statement = """ import binascii value.encode('hex_codec') """ testSpeed(statement, setup) 

Resultados:

 import binascii binascii.hexlify(value) 2.18547999816 value.encode('hex_codec') 2.91231595077