您的位置:首页 > 其它

pdu 短信 7bit解码原理(转)

2018-03-01 20:41 344 查看


空间
接收到TEXT类型的短信,但是还是按照PDU的方式来接收的(有标致位提示),下面就举个例子 

现在有 B55AAD06 
是属于7BIT的编码,我现在要直接转换成UNICODE的编码 ,翻译过来应该是5555 
现在要做的就是: 
1。把B55AAD06转换成2进制的数据: 
1011 0101 0101 1010 1010 1101 0000 0110 
然后反转过来,就是06AD5AB5 
0000 0110 1010 1101 0101 1010 1011 0101 
2。然后从后面开始提取7位: 
0000 0110101 0110101 0110101 0110101 
3。转换为: 
前面4位不要了,再转换成10进制: 
53 53 53 53 
就是5555

at指令下收发短信(PDU & TXT)

空间
AT指令发送PDU短信详解(支持发送到小灵通)☆★☆ AT指令发送PDU短信详解(支持发送到小灵通) ☆★☆
为了完成公司的短信收发程序,我找遍了所有资料,最后在很多网友的支持下 
基本上完成了这个程序,为了使后来的人免走我同样的弯路,我将AT指令发送PDU 
短信的全过程及函数整理出来,希望能给大家帮助,欢迎大家与我一起探讨: 
本文以一个实例来解说AT指令发送PDU短信的全过程,假如我要发送下面的短信: 
接收号码:+8613602433649 
短信内容:工作愉快! 
短信中心号码:+8613800200500 

一、短信中心号码处理:用字符串 addr 表示 
   1、将短信息中心号码去掉+号,看看长度是否为偶数,如果不是,最后添加F 
   即 addr = "+8613800200500" 
    => addr = "8613800200500F" 
   2、将奇数位和偶数位交换。 
    => addr = "683108020005F0" 
   3、将短信息中心号码前面加上字符91,91是国际化的意思 
    => addr = "91683108020005F0" 
   4、算出 addr 长度,结果除2,格式化成2位的16进制字符串,16 / 2 = 8 => "08" 
    => addr = "0891683108020005F0" 
二、手机号码处理:用字符串 phone 
   1、将手机号码去掉+号,看看长度是否为偶数,如果不是,最后添加F 
   即 phone = "+8613602433649" 
    => phone = "8613602433649F" 
   2、将手机号码奇数位和偶数位交换。 
    => phone = "683106423346F9" 
三、短信息部分处理:用字符串 msg 表示 
   1、转字符串转换为Unicode代码,例如“工作愉快!”的unicode代码为 5DE54F5C61095FEBFF01, 
    (转换函数见最后附录) 
   2、将 msg 长度除2,保留两位16进制数,即 5DE54F5C61095FEBFF01 = 20 / 2 => "0A",再加上 msg 
    => msg = "0A5DE54F5C61095FEBFF01" 

四、组合 
   1、手机号码前加上字符串 11000D91(1100:固定,0D:手机号码的长度,不算+号,十六进制表示,91:发送到手机为91,发送到小灵通为81), 
   即 phone = "11000D91" + phone 
    => 11000D91683106423346F9 
   2、手机号码后加上 000800 和刚才的短信息内容,000800也写死就可以了 
   即 phone = phone + "000800" + msg 
   即 11000D91683106423346F9 + 000800 + 0A5DE54F5C61095FEBFF01 
    => phone = 11000D91683106423346F90008000A5DE54F5C61095FEBFF01 
   3、phone 长度除以2,格式化成2位的十进制数 
   即 11000D91683106423346F90008000A5DE54F5C61095FEBFF01 => 50位 / 2 => 25 

五、所以要发送的内容为 
AT+CMGF=0 <回车> 
OK 
AT+CMGS=25<回车> 
> addr+phone <Ctrl+Z发送> 
六、如果返回不是ERROR,恭喜你,发送成功了^_^AT指令发送短信(TXT模式)怎样给我发送一条短消息? 
现在你手里有了G网模块,但首先你要确保如下操作已经完成: 
1)    模块上电并且AT命令同你的PC串口通信顺畅。 
2)     SIM卡没有欠费,并且已经登陆GSM网络(可以使用AT+CREG?查询,如果返回1或者5表示正常)。 
3)      AT+CMGF=1设置完毕。 

有了以上的过程,那么你就可以给我发信息了,你要使用的AT命令是:AT+CMGS。 
假如我的手机号是:13636371111(后四位是假的)。 

1)    从串口输入:AT+CMGS=” 然后按回车键。 
2)    这个时候你可以看到有个大于号 ‘>’弹出,提示你可以输入消息的内容了。 

假如你想发送“hello world”,直接在’>’后面输入即可,输入完了后按’CTRL^Z”,稍微等一下,你的信息也就发出去了,如果编程好像是0x1B(记不清了,你可以查下ASCII表)。 
全部过程如下: 
AT+CMGS="13636371111" 
> hello world 
+CMGS: 199 

OK 
你需要一直等到OK返回,才能确定是成功发出,中间的那个东西可以先不管。如果你输入 “ hello world”后,但又不想发了,按ESC可以取消发送,就不再介绍。
收到短信+CMTI:”SM”,1                    收到短信后,提示终端接收(存储到SIM卡中,序号为1)+CMT:,25                        短信直接传输到串口(PDU)。0891683108304745F5…………..TXT短信格式:+CMGR: “REC UNREAD”,”8613203718355”,,”09/04/16,11:46:52+32”,145,36,0,0,”8613800374549”,145,9123456789:08 91 683108100005F0 31 00 0D 91 683119109991F2 00 08 C2 06 60A8597DFF01
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: