Проверьте, является ли строка шестнадцатеричной
Я знаю, что самый простой способ - это использоватьрегулярное выражение, но мне интересно, есть ли другие способы сделать эту проверку.
Зачем мне это нужно? Я пишу скрипт Python, который читает текстовые сообщения (SMS) изSIM карта. В некоторых ситуациях поступают шестнадцатеричные сообщения, и мне нужно выполнить их обработку, поэтому мне нужно проверить, является ли полученное сообщение шестнадцатеричным.
Когда я отправляю следующие смс:
Hello world!
И мой сценарий получает
00480065006C006C006F00200077006F0072006C00640021
Но в некоторых ситуациях я получаю обычные текстовые сообщения (не шестнадцатеричные). Так что мне нужно сделатьif hex контроль.
Я использую Python 2.6.5.
ОБНОВИТЬ:
Причина этой проблемы в том, что (каким-то образом) отправленные мной сообщения принимаются какhex
в то время как сообщения, отправляемые оператором (информационные сообщения и рекламные объявления), принимаются в виде обычной строки. Поэтому я решил проверить и убедиться, что у меня есть сообщение в правильном формате строки.
Some extra details: Я использую модем Huawei 3G иPyHumod читать данные с сим-карты.
Possible best solution to my situation:
Лучший способ обработать такие строки - использоватьa2b_hex
(А.к.а.unhexlify
) а такжеutf-16 big endian encoding
(как упомянул @JonasWielicki):
from binascii import unhexlify # unhexlify is another name of a2b_hex
mystr = "00480065006C006C006F00200077006F0072006C00640021"
unhexlify(mystr).encode("utf-16-be")
>> u'Hello world!'