我知道最简单的方法是使用正则表达式,但我想知道是否有其他方法可以进行此检查.
我为什么需要这个?我正在编写一个Python脚本,从SIM卡读取短信(SMS).在某些情况下,十六进制消息到达,我需要为它们做一些处理,所以我需要检查收到的消息是否是十六进制.
当我发送以下短信时:
Hello world!
Run Code Online (Sandbox Code Playgroud)
我的剧本收到了
00480065006C006C006F00200077006F0072006C00640021
Run Code Online (Sandbox Code Playgroud)
但在某些情况下,我会收到正常的短信(不是十六进制).所以我需要做一个if hex控件.
我使用的是Python 2.6.5.
更新:
这个问题的原因是,(某种程度上)我发送的消息是在接收hex到运营商发送的消息(信息消息和广告)时作为普通字符串接收的.所以我决定进行检查并确保我以正确的字符串格式显示消息.
一些额外的细节:我使用华为3G调制解调器和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!'
Run Code Online (Sandbox Code Playgroud)