目前,发送短消息常用Text和PDU(Protocol Data

Unit,协议数据单元)模式。使用Text模式收发短信代码简单,实现起来十分容易,但最大的缺点是不能收发中文短信;而PDU模式不仅支持中文短信,也能发送英文短信。PDU模式收发短信可以使用3种编码:7-bit、8-bit和UCS2编码。7-bit编码用于发送普通的ASCII字符,8-bit编码通常用于发送数据消息,UCS2编码用于发送Unicode字符。一般的PDU编码由A

B C D E F G H I J K L M十三项组成。

A:短信息中心地址长度,2位十六进制数(1字节)。

B:短信息中心号码类型,2位十六进制数。

C:短信息中心号码,B+C的长度将由A中的数据决定。

D:文件头字节,2位十六进制数。

E:信息类型,2位十六进制数。

F:被叫号码长度,2位十六进制数。

G:被叫号码类型,2位十六进制数,取值同B。

H:被叫号码,长度由F中的数据决定。

I:协议标识,2位十六进制数。

J:数据编码方案,2位十六进制数。

K:有效期,2位十六进制数。

L:用户数据长度,2位十六进制数。

M:用户数据,其长度由L中的数据决定。J中设定采用UCS2编码,这里是中英文的Unicode字符。

PDU编码协议简单说明

例1

发送:SMSC号码是+8613800250500,对方号码是13693092030,消息内容是“Hello!”。从手机发出的PDU串可以是

08 91 68 31 08 20 05 05 F0 11 00 0D 91 68 31 96 03 29 30 F0

00 00 00 06 C8 32 9B FD 0E 01

对照规范,具体分析:

分段 含义 说明

08 SMSC地址信息的长度 共8个八位字节(包括91)

91 SMSC地址格式(TON/NPI) 用国际格式号码(在前面加‘+’)

68 31 08 20 05 05

F0 SMSC地址 8613800250500,补‘F’凑成偶数个

11 基本参数(TP-MTI/VFP) 发送,TP-VP用相对格式

00 消息基准值(TP-MR) 0

0D 目标地址数字个数 共13个十进制数(不包括91和‘F’)

91 目标地址格式(TON/NPI) 用国际格式号码(在前面加‘+’)

68 31 96 03 29 30

F0 目标地址(TP-DA) 8613693092030,补‘F’凑成偶数个

00 协议标识(TP-PID) 是普通GSM类型,点到点方式

00 用户信息编码方式(TP-DCS) 7-bit编码

00 有效期(TP-VP) 5分钟

06 用户信息长度(TP-UDL) 实际长度6个字节

C8 32 9B FD 0E

01 用户信息(TP-UD) “Hello!”

例2

接收:SMSC号码是+8613800250500,对方号码是13693092030,消息内容是“你好!”。手机接收到的PDU串可以是

08 91 68 31 08 20 05 05 F0 84 0D 91 68 31 96 03 29 30 F0 00

08 30 30 21 80 63 54 80 06 4F 60 59 7D 00

21对照规范,具体分析:

分段 含义 说明

08 地址信息的长度 个八位字节(包括91)

91 SMSC地址格式(TON/NPI) 用国际格式号码(在前面加‘+’)

68 31 08 20 05 05

F0 SMSC地址 8613800250500,补‘F’凑成偶数个

84 基本参数(TP-MTI/MMS/RP) 接收,无更多消息,有回复地址

0D 回复地址数字个数 共13个十进制数(不包括91和‘F’)

91 回复地址格式(TON/NPI) 用国际格式号码(在前面加‘+’)

68 31 96 03 29 30

F0 回复地址(TP-RA) 8613693092030,补‘F’凑成偶数个

00 协议标识(TP-PID) 是普通GSM类型,点到点方式

08 用户信息编码方式(TP-DCS) UCS2编码

30 30 21 80 63 54

80 时间戳(TP-SCTS) 2003-3-12

08:36:45 +8时区

06 用户信息长度(TP-UDL) 实际长度6个字节

4F 60 59 7D 00

21 用户信息(TP-UD) “你好!”

若基本参数的最高位(TP-RP)为0,则没有回复地址的三个段。从Internet上发出的短消息常常是这种情形。

注意号码和时间的表示方法,不是按正常顺序顺着来的,而且要以‘F’将奇数补成偶数。

在PDU

Mode中,可以采用三种编码方式来对发送的内容进行编码,它们是7-bit、8-bit和UCS2编码。7-bit编码用于发送普通的ASCII字符,它将一串7-bit的字符(最高位为0)编码成8-bit的数据,每8个字符可“压缩”成7个;8-bit编码通常用于发送数据消息,比如图片和铃声等;而UCS2编码用于发送Unicode字符。PDU串的用户信息(TP-UD)段最大容量是140字节,所以在这三种编码方式下,可以发送的短消息的最大字符数分别是160、140和70。这里,将一个英文字母、一个汉字和一个数据字节都视为一个字符。

需要注意的是,PDU串的用户信息长度(TP-UDL),在各种编码方式下意义有所不同。7-bit编码时,指原始短消息的字符个数,而不是编码后的字节数。8-bit编码时,就是字节数。UCS2编码时,也是字节数,等于原始短消息的字符数的两倍。如果用户信息(TP-UD)中存在一个头(基本参数的TP-UDHI为1),在所有编码方式下,用户信息长度(TP-UDL)都等于头长度与编码后字节数之和。如果采用GSM

03.42所建议的压缩算法(TP-DCS的高3位为001),则该长度也是压缩编码后字节数或头长度与压缩编码后字节数之和。

android pdu 编码规则,[转载]PDU编码规则相关推荐

  1. c语言固定资产管理系统编码,固定资产管理系统地址编码规则

    各单位物管员: 由于部分学院和处室校区搬迁,原有的设备存放地点和领用人发生变化.为方便修改设备存放地点和领用人,物管员可以申请固定资产管理系统网络在线修改功能.开通该功能后物管员需登陆固定资产管理系统 ...

  2. FatFs 之二 路径规则、字符编码、编码页、卷管理详解

    写在前面 本文的内容部分来自于 FatFs 的官方文档,但是添加了一些额外的章节及内容.其并不是原版 FatFs 的官方文档的翻译.如果关注与 FatFs 的官方文档,请从本文的 参考 章节前去查看即 ...

  3. C语言密勒码的软件编码,密勒码的编码规则是什么?请画出代码序列11010010的密勒码波形?...

    相关题目与解析 CMI码的编码规则是什么?请画出代码序列11010010的CMI码波形? 数字双相码的编码规则是什么?请画出代码序列11010010的双相码波形? 简述双相码(曼彻斯特码)的编码规则并 ...

  4. 电信CDMA PDU短信号码字段编码转换的python实现

    参考链接:CDMA(3GPP2)SMSPDU全解析-爱码网 CDMA SMS pdu解码_zx249388847的博客-CSDN博客_cdma sms cdma pdu解析终极文档_月之海的博客-CS ...

  5. 【Android RTMP】音频数据采集编码 ( 音频数据采集编码 | AAC 高级音频编码 | FAAC 编码器 | Ubuntu 交叉编译 FAAC 编码器 )

    文章目录 安卓直播推流专栏博客总结 一. 音频数据采集.编码 二. AAC 高级音频编码 三. FAAC 编码器 四. Ubuntu 18.04.4 交叉编译 FAAC 编码器 安卓直播推流专栏博客总 ...

  6. Android 音视频采集与软编码总结

    请尊重原创,转载请注明出处:http://blog.csdn.net/mabeijianxi/article/details/75807435(本文已在 "任玉刚" 微信公众号发布 ...

  7. C++ 字符编码知识转载

    基本常识 1.位和字节 说起编码,我们必须从最基础的说起,位和字节(别觉得这个过于简单不值一说,我还真见过很多个不能区分这两者的程序员).位(bit)是指计算机里存放的二进制值(0/1),而8个位组合 ...

  8. Java中intentfiler_【Android - 组件】之IntentFilter的匹配规则

    我们知道,Activity的启动模式分为两种,分别是显式启动和隐式启动.显式启动需要明确的指定被启动的对象的组件信息,包括包名和类名:而隐式启动需要 Intent 能够匹配目标组件的 IntentFi ...

  9. 【Android 安装包优化】WebP 应用 ( Android 中使用 libwebp.so 库编码 WebP 图片 )

    文章目录 一.Android 中使用 libwebp.so 库编码 WebP 图片 二.完整代码示例 三.参考资料 一.Android 中使用 libwebp.so 库编码 WebP 图片 libwe ...

最新文章

  1. 2022-2028年中国锂电池设备行业深度调研及投资前景预测报告
  2. java增强型for循环(三种遍历集合方式)
  3. 开源怎么挣钱(转帖收藏)
  4. widget模式弄不出来_【春天文化】互联网时代的教育模式培养精英
  5. php 网络图片 转本地,PHP将Base64图片转换为本地图片并保存
  6. 69. (待补) (使用sqlite3)实现简单的管理系统 MVC 将链表作为内存数据模型,将sqlite3作为数据库,将终端作为交互界面。读数据库生成 链表,修改链表写入文件。...
  7. Maven POM 浅析
  8. ldap统一用户认证php,Docker搭建OpenLDAP+phpLDAPadmin统一用户认证的方法
  9. 内网地址(私有地址、私有IP地址空间)
  10. windows组策略_Windows中的“组策略”是什么?
  11. python爬取的代码_零基础掌握百度地图兴趣点获取POI爬虫(python语言爬取)(代码篇)...
  12. oracle宿主常量及变量,ORACLE之 LOB 数据类型
  13. python一张纸折叠到珠峰高度_一张普通纸折叠27次后会是什么样?专家:厚度超过珠穆朗玛峰...
  14. 8.3 案例实现(加载数据库sakila中的数据至数据仓库sakila_dw)
  15. python之使用plt笔记
  16. Centos 7 虚拟机安装 jenkins
  17. 想搭建一个专属于你的网站吗??新手向超详细攻略
  18. 解决NVIDIA GeForce系列显卡NVENC并发Session数目限制问题
  19. 如何修改非root用户的ulimit -n的值
  20. python——drop函数

热门文章

  1. IntelliJ IDEA for Mac 如何自定义快捷键_设置快捷键
  2. Linux 命令之 timedatectl -- 查看系统当前时区设置
  3. Oracle的package(包)
  4. java串口发送16进制数据_MFC串口通信发送16进制数据的方法
  5. python项目管理器 宝塔面板 django 404_宝塔面板成功部署Django项目流程(图文)
  6. #{}不自动改参数类型_如何在不刷新页面的情况下改变URL
  7. 【C语言入门学习笔记】如何把C语言程序变成可执行文件!
  8. java fx choicebox_JavaFX:具有图像和文本的ChoiceBox
  9. hive kerberos java_Kerberos身份验证错误 - Sqoop通过Hive从SQL导入HDFS
  10. python脚本语言采用声音作为手段_LKJ自动化测试脚本定义及生成技术研究