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
相关文章推荐
- GSM PDU 7bit短信编码与解码
- 短信猫软件的实现(C#)<八>7bitPDU的解码
- 手机短信PDU编码与解码
- 短信7bit编解码
- C#:PDU格式短信编解码(二)长短信拆分
- 手机短信PDU编码与解码
- PDU模式下纯英文短信的解码函数
- C#:PDU格式短信编解码(三)编码部分
- 手机短信PDU编码与解码
- 手机短信的PDU编码和解码
- 手机短信的PDU编码和解码 (转)
- PDU短信解码
- 手机短信的PDU编码和解码
- pdu短信解码
- 手机短信的PDU编码和解码
- java解码PDU短信
- C#:PDU格式短信编解码(四)编码参数设置部分
- C#:PDU格式短信编解码(五)GSM字符集
- Linux开发中GSM 中文短信 SMS PDU编码原理及实现
- 短信PDU模式解码