Sprawdź, czy łańcuch jest szesnastkowy

Wiem, że najłatwiejszym sposobem jest użycieWyrażenie regularne, ale zastanawiam się, czy istnieją inne sposoby na sprawdzenie tego.

Dlaczego tego potrzebuję? Piszę skrypt Pythona, który czyta wiadomości tekstowe (SMS) z aSIM karta. W niektórych sytuacjach pojawiają się komunikaty szesnastkowe i muszę je przetworzyć, więc muszę sprawdzić, czy odebrana wiadomość jest szesnastkowa.

Kiedy wysyłam następujące SMS-y:

Hello world!

A mój skrypt otrzymuje

00480065006C006C006F00200077006F0072006C00640021

Ale w niektórych sytuacjach otrzymuję normalne wiadomości tekstowe (nie szesnastkowe). Więc muszę zrobićjeśli heks kontrola.

Używam Pythona 2.6.5.

AKTUALIZACJA:

Powodem tego problemu jest (w jakiś sposób) wiadomości, które wysłałem, są odbierane jakohex podczas gdy wiadomości wysyłane przez operatora (komunikaty informacyjne i reklamy) są odbierane jako normalny ciąg. Postanowiłem więc sprawdzić i upewnić się, że mam wiadomość we właściwym formacie.

Dodatkowe szczegóły: Używam modemu Huawei 3G iPyHumod odczytać dane z karty SIM.

Możliwe najlepsze rozwiązanie mojej sytuacji:

Najlepszym sposobem radzenia sobie z takimi ciągami jest użyciea2b_hex (znany jako.unhexlify) iutf-16 big endian encoding (jak wspomniał @JonasWielicki):

from binascii import unhexlify  # unhexlify is another name of a2b_hex

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

questionAnswers(9)

yourAnswerToTheQuestion