Parsing 如何处理AT+;CMGL命令

Parsing 如何处理AT+;CMGL命令,parsing,gsm,at-command,Parsing,Gsm,At Command,我有一些代码(顺便说一句,在.net中,但我认为这并不重要),通过插入Windows 7 PC USB端口的GSM调制解调器发送和接收SMS消息(使用发送到虚拟串行端口的AT命令) 它通常工作正常(因为我可以理解收到的大多数消息),但每当我发出AT+CMGL命令时,我会收到一条我不希望看到的消息,或者我可以知道它是什么 下面是一个示例(我更改了address和body的值,因为我不知道此消息是否包含我不想公开的任何信息,但我保持了值的长度不变,并输入了指示消息的字符): 首先让我印象深刻的是,地

我有一些代码(顺便说一句,在.net中,但我认为这并不重要),通过插入Windows 7 PC USB端口的GSM调制解调器发送和接收SMS消息(使用发送到虚拟串行端口的
AT
命令)

它通常工作正常(因为我可以理解收到的大多数消息),但每当我发出
AT+CMGL
命令时,我会收到一条我不希望看到的消息,或者我可以知道它是什么

下面是一个示例(我更改了address和body的值,因为我不知道此消息是否包含我不想公开的任何信息,但我保持了值的长度不变,并输入了指示消息的字符):

首先让我印象深刻的是,
地址
相当长,并且不包含
+
(或start 00),因此看起来不像电话号码(至少在我对电话号码的有限理解范围内)。因此,我想知道这是否是我的电信供应商发出的信息

其次,消息体看起来是十六进制值,因此可能是一位二进制数据。所以,我的问题是

有没有什么方法可以让我解码这些信息,找出它们的真正含义?

(我尝试将主体加载到一个二进制数组中,并将其转储到扩展名为.jpg的磁盘上,以查看它是否是一个图像,但这当然不起作用)


这感觉可能是参数设置-是否有某种标题,我可以读取以确定是否是这种情况?

我不确定我是否正确地解决了您的问题,但我猜您收到的消息的格式不受调制解调器设置的支持。为消息启用了哪种格式?文本还是PDU


AT+CMGF命令将返回支持的消息格式。AT+CMGF=1设置为文本格式。

是的,可以解析这些数据,您对这是十六进制数据的怀疑也是正确的。这可能是由于字符编码造成的

我刚刚写了关于UCS-2字符编码和
AT+CMGL
的文章,其中十六进制编码一直都是这样。从阅读开始。然后阅读有关
格式的详细信息,看看您是否能够找出如何检测它是否为十六进制编码

如果您无法理解,或者在任何情况下,您都可以将字符编码设置为
“HEX”
,以始终对数据进行十六进制编码,尽管这并不能神奇地解决所有问题,因为您始终会对数据进行十六进制编码,您仍然需要知道接收数据的确切字符编码,如果这可以改变,你必须知道什么时候


因此,使用UCS-2可能不是一个坏主意,因为这样您就知道所有接收到的数据都将采用完全相同的格式和编码。

谢谢您的回答。在执行CMGL命令之前,我确实将模式设置为文本模式(AT+CMGF=1)(我刚刚检查了我的应用程序的日志文件,该命令成功返回),并且大多数时候消息都是普通文本消息,只是偶尔我会收到这些消息。
+CMGL: 0,"REC READ","7700000000000000000000",,"12/09/10,10:25:06+08"
0123456789ABCDEF00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+CMGL: 1,"REC READ","7700000000000000000000",,"12/09/10,10:25:07+08"
000000000000000000000000000000000000000000000000000000000000000000000000000000090000000000000000000000000000000000000000

OK