AT指令短信接收

 

1、接收中文短信

    以接收13752141860 号码发送来的你好,信息中心号码为:+8613800220500为例,手机接收到字符串为:

+CMT: ,24

0891683108200205F0240D91683157121468F0000860800331220000044F60597D

其中+CMT表示新短信指示代码格式为收到短消息立即显示;若+CMTI则指示收到短消息存储到存储器里;是否直接显示是通过CNMI设置的;

24表示PDU数据中短信中心号码后面的字符串长度/2,即240D91683157121468F0000860800331220000044F60597D的长度除以2

下面分析一下接收到的PDU数据:

108 //信息中心号码的长度,91+683108200205F0的长度除2,格式化成2位的16进制字符串所得

291 //短信中心号码类型

3683108200205F0 //短信中心号码,转换方法前面有提到

424 //TPDU头字节

50D //发送源号码长度,8613752141860的长度格式化为216进制所得

691 //发送源号码类型

7683157121468F0 //发送源号码

800 //协议标识 TPPID

908 //数据编码方案,08:中文编码,00为英文或数字,Bit No.7Bit No.6

10608003312200 //日期时间,奇偶互换:06-08-30 13:22:00,有论坛上写接收到的是026080……就是前面有’02’,表示2006-08…但是我用不同的手机发送短信过来接收到的都是06,无法取得2006,不知道是发送方手机设置的问题还是哪里的问题,还在研究中.

1100 //时区

1204 //用户数据长度TP-UDLTP-User-Data-Length,4F60597D的长度除2格式化为216进制数所得

(13) 4F60597D //”你好”的UNICODE码,同样提供一个DELPHI下的解码函数:


2、接收纯英文或数字

上面例子中接收到的是中文短信“你好”,那么当接收到的短信是纯中文或者数字的时候又如何解码呢?

例如接收到13752141860发送的英文短信“hello,手机接收到的字符串为:

+CMT: ,24

0891683108200205F0240D91683157121468F00000608003416270000461F1980C

前面编码的意义和中文信息相同,这里不再重复,只从红色的00说起:

先前提到了这两位表示数据编码方案,08为中文编码,00为英文或数字,当手机发送普通的ASCII字符即使用7bit编码方式,说明我们接收到的短信是英文或者数字格式的,而不是中文UNICODE码;

04仍然是用户数据(61F1980C)长度除2格式化为210进制数所得,61F1980C就是发送方发送过来的短信息,根据前面的00我们知道这是一段7-bit码,而不再是UNICODE码,7-bit的解码过程很复杂,大体过程是:

将源数据每7个字节分为一组,解码成8个字符。基本自然是:将第n个字节左移n位,再加上前一字节的剩余数据,即第(n-1)个字节右移(8-n)位的数值,屏幕最高位,即得到一目标字符数据,n=0…6。第7个字节右移1位就得到解码后的第8个字符数据。

 

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: at命令是一种用于控制调制解调器的指令集,可以通过串口与调制解调器进行通信。在C语言中,我们可以通过串口发送AT指令给调制解调器并接收响应。 首先,我们需要打开串口与调制解调器进行通信。可以使用C语言的串口通信库,例如在Windows平台下可以使用WinAPI中的函数来打开和配置串口。打开串口后,我们可以使用C语言的IO函数来发送AT指令给调制解调器。 以发送AT指令"AT+CGMI\r\n"(查询设备制造商信息)为例,我们可以使用C语言的串口写入函数向串口发送这个指令。发送完指令后,我们可以使用C语言的串口读取函数从串口接收调制解调器的响应。 接收到的响应一般为字符串形式,可以使用C语言字符串处理函数进行解析。我们可以判断响应是否成功以及根据响应的内容进行相应的操作。 在接收到完整的响应后,我们可以继续发送其他AT指令进行后续操作,或者关闭串口与调制解调器的通信。 总结来说,通过使用C语言的串口通信函数,我们可以发送AT指令给调制解调器并接收响应。在接收到响应后,我们可以进行相应的处理操作,实现对调制解调器的控制。 ### 回答2: 在C语言中,我们可以使用at指令接收指令。at指令是一种用于与调制解调器通信的命令,它允许我们通过串口与调制解调器进行交互。 要在C语言程序中接收at指令,我们需要首先设置串口通信参数,如波特率、数据位、停止位、校验位等。然后,我们可以使用C语言的文件操作函数来打开串口设备文件,并设置该文件描述符为非阻塞模式,以便在接收at指令时不会阻塞程序的执行。 接下来,我们可以使用C语言的文件读取函数,如read()函数,从串口设备文件中读取数据。我们可以使用一个循环来不断读取数据,直到接收到完整的at指令为止。在读取数据时,我们可以使用缓冲区来存储接收到的数据,并根据需要进行处理。 一旦接收到完整的at指令,我们可以对其进行解析和处理。我们可以使用字符串处理函数,如strtok()函数,将接收到的指令分解为不同的参数。然后,我们可以根据指令的类型和参数,执行相应的操作。例如,我们可以向调制解调器发送一条短信、建立一个数据连接或者查询设备的状态等。 最后,在程序执行完对at指令的处理后,我们应该关闭串口设备文件,释放资源,并结束程序的执行。 总结来说,要在C语言中接收at指令,我们需要设置串口通信参数,并使用文件操作函数来读取串口设备文件中的数据。然后,我们可以解析和处理接收到的指令,执行相应的操作。完成后,我们应该关闭串口设备文件,并释放资源。 ### 回答3: 在C语言中,我们可以使用“at”指令接收指令。这个指令是用来在程序中控制程序执行流程的一种方式。在C语言中,我们可以使用条件语句来实现“at”接收指令。 例如,我们可以使用if语句来实现“at”接收指令。这样,当满足特定条件时,程序就会执行相应的指令。例如: ```c int number = 5; // 假设我们要接收指令是数字5 if(number == 5){ // 执行指令1 printf("执行指令1\n"); }else if(number == 10){ // 执行指令2 printf("执行指令2\n"); }else{ // 执行默认指令 printf("执行默认指令\n"); } ``` 在上面的例子中,如果我们输入的指令是5,那么程序将执行指令1并输出“执行指令1”。如果输入的指令是10,程序将执行指令2并输出“执行指令2”。如果输入的指令既不是5也不是10,程序将执行默认指令并输出“执行默认指令”。 这只是一个简单的例子,实际上,在C语言中,我们可以根据需要使用多个条件语句来实现复杂的“at”接收指令。这样,我们可以根据不同的输入执行不同的指令,实现程序的灵活控制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值