Compruebe si una cadena es hexadecimal

Sé que la forma más fácil es usando unexpresión regular, pero me pregunto si hay otras formas de hacer esta comprobación.

¿Por qué necesito esto? Estoy escribiendo un script en Python que lee mensajes de texto (SMS) de unSIM tarjeta. En algunas situaciones, los mensajes hexadecimales llegan y necesito hacer un procesamiento para ellos, así que necesito verificar si un mensaje recibido es hexadecimal.

Cuando envío los siguientes SMS:

Hello world!

Y mi guion recibe

00480065006C006C006F00200077006F0072006C00640021

Pero en algunas situaciones, recibo mensajes de texto normales (no hexadecimales). Así que necesito hacer unsi hexadecimal controlar.

Estoy usando Python 2.6.5.

ACTUALIZAR:

La razón de ese problema es que (de alguna manera) los mensajes que envié se reciben comohex mientras que los mensajes enviados por el operador (mensajes de información y anuncios) se reciben como una cadena normal. Así que decidí realizar una comprobación y asegurarme de que tengo el mensaje en el formato de cadena correcto.

Algunos detalles extra: Estoy usando un módem 3G de Huawei yPyHumod para leer los datos de la tarjeta SIM.

Posible mejor solución a mi situación:

La mejor manera de manejar tales cadenas es usandoa2b_hex (a.k.a.unhexlify) yutf-16 big endian encoding (como lo mencionó @JonasWielicki):

from binascii import unhexlify  # unhexlify is another name of a2b_hex

mystr = "00480065006C006C006F00200077006F0072006C00640021"
unhexlify(mystr).encode("utf-16-be")
>> u'Hello world!'

Respuestas a la pregunta(9)

Su respuesta a la pregunta