最も簡単な方法は正規表現を使用することですが、このチェックを行う方法は他にあるのではないかと思います。
なぜこれが必要なのですか?SIMカードからテキストメッセージ(SMS)を読み取るPythonスクリプトを書いています。状況によっては、16進メッセージが到着し、それらに対して何らかの処理を行う必要があるため、受信したメッセージが16進であるかどうかを確認する必要があります。
次のSMSを送信する場合:
Hello world!
そして私のスクリプトは
00480065006C006C006F00200077006F0072006C00640021
しかし、状況によっては、通常のテキストメッセージ(16進数ではない)を受信します。だから私はifhexコントロールをする必要があります。
Python2.6.5を使用しています。
アップデート:
その問題の理由は、(どういうわけか)私が送信hex
したメッセージは、オペレーターによって送信されたメッセージ(情報メッセージと広告)が通常の文字列として受信されているのと同じように受信されるためです。そこで、チェックを行い、メッセージが正しい文字列形式であることを確認することにしました。
いくつかの追加の詳細:私はHuawei3GモデムとPyHumodを使用してSIMカードからデータを読み取ります。
私の状況に対する可能な最善の解決策:
このような文字列を処理する最良の方法は、a2b_hex
(aka 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!'