Я знаю, что самый простой способ - использовать регулярное выражение , но мне интересно, есть ли другие способы сделать эту проверку.
Зачем мне это нужно? Я пишу Python script, который читает текстовые сообщения (SMS) с карты SIM. В некоторых ситуациях появляется шестнадцатеричное сообщение, и мне нужно выполнить некоторую обработку для них, поэтому мне нужно проверить, является ли принятое сообщение шестнадцатеричным.
При отправке следующих SMS:
Hello world!
И мой script получает
00480065006C006C006F00200077006F0072006C00640021
Но в некоторых ситуациях я получаю обычные текстовые сообщения (не hex). Поэтому мне нужно сделать элемент if hex.
Я использую Python 2.6.5.
UPDATE:
Причиной этой проблемы являются (как-то) сообщения, отправленные мной, как hex
, в то время как сообщения, отправленные оператором (информационные сообщения и объявления.), принимаются как обычная строка. Поэтому я решил сделать чек и убедиться, что у меня есть сообщение в правильном формате строки.
Дополнительные сведения. Я использую модем Huawei 3G и PyHumod для чтения данных с SIM-карты.
Возможно наилучшее решение моей ситуации:
Лучший способ обработки таких строк - использовать a2b_hex
(a.k.a. 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!'