参考链接:CDMA(3GPP2)SMSPDU全解析-爱码网

CDMA SMS pdu解码_zx249388847的博客-CSDN博客_cdma sms
cdma pdu解析终极文档_月之海的博客-CSDN博客
CDMA PDU 编解码补充解析_zx249388847的博客-CSDN博客

CDMA – lytsing's Blog

一、PDU串解析

CDMA的pdu格式与GSM的相差很多,不能直接用肉眼看出来。第一条内容比较长,就拿第二条pdu串来分析吧。

1.首先将PDU串打成PDU包将PDU串相邻的两个ascii字符拼凑成一个8bit数据

如下:
00 00 02 10 02 02 07 02 c5 4c e2 25 a8 a8 06 01 4c 08 4d 00 03 10 01 f8 01 3e 20 f0 01 90 01 78 01 90 01 62 df ca 70 04 b1 ac b1 ab b4 23 96 14 c6 70 01 62 96 3b 2b 12 b9 82 7a e3 10 c0 01 72 9f 54 4c 0b 10 8b b4 23 91 8a 75 d0 01 63 31 7a 70 02 9f 52 e0 7c f0 f8 03 06 08 12 29 19 26 16

消息传送类型: 0x00     point to point message(表示点对点消息)

下面的内容为短消息的各个字段 每个字段分为三个部分: 字段类型(ID)(8bit)、字段长度(Length)(8bit)和字段内容.

第一个字段: 00 02 10 02
        0x00, 表示uTeleserviceID字段
        0x02, 字段长度,该长度必须为2,否则为错误的pdu信息

字段内容为:0x1002,十进制是4098,

第二个字段: 02 07 02 c5 4c e2 25 a8 a8
        0x02, SMS_TL_ORIG_ADDR 表示 (短信发送地址)
        0x07, 字段长度为7

字段内容: 02 c5 4c e2 25 a8 a8
只看前面几个 02 c5 4c e2的:
        0000 0010 1100 0101 0100 1100 1110 0010 0010
取第一个bit 0 表示 RIL_CDMA_SMS_DIGIT_MODE_4_BIT 是4bit压缩
第二个bit 0 表示 RIL_CDMA_SMS_NUMBER_MODE_NOT_DATA_NETWORK
下来8个bit 是 00 0010 11 = 11,表示号码长度 为11
由于是4bit压缩 ,后面44个bit(4*11)表示号码,解析出来是15338896020

第三个字段: 06 01 4c
        表示SMS_TL_BEARER_RPLY_OPT

第四个字段:08 4d 00 03 10 01 f8 01 3e 20 f0 01 90 01 78 01 90 01 62 df ca 70 04 b1 ac b1 ab b4 23 96 14 c6 70 01 62 96 3b 2b 12 b9 82 7a e3 10 c0 01 72 9f 54 4c 0b 10 8b b4 23 91 8a 75 d0 01 63 31 7a 70 02 9f 52 e0 7c f0 f8 03 06 08 12 29 19 26 16

0x08, 表示SMS_TL_BEARER_DATA字段(短信内容)
0x4d,字段长度为77

这个字段也分成各个子字段:

第一子字段: 00 03 10 01 f8
0x00 Mesage Id
0x03 内容长度
10 01 f8  === 0001 0000 0000 0001 1111 1000
0001 表示 DELIVER 短信
0000 0000 0001 1111表示 message id.
紧接后面的 1, 表示HEADER_IND

第二个子字段:01 3e 20 f0 01 90 01 78 01 90 01 62 df ca 70 04 b1 ac b1 ab b4 23 96 14 c6 70 01 62 96 3b 2b 12 b9 82 7a e3 10 c0 01 72 9f 54 4c 0b 10 8b b4 23 91 8a 75 d0 01 63 31 7a 70 02 9f 52 e0 7c f0 f8
0x01, 字段类型
0x3e(62),字段长度
20 f0 01 === 0010 0000 1111 0000 0000 0001
0x20 的前5个bit为00100, 为0x04, 表示短信编码方式为RIL_CDMA_SMS_ENCODING_UNICODE (UNICODE)
0x20 的后3个bit, 0xf0的前5个bit,为 000 1111 0, 即0x1e (30),表示有30个UNICODE 字符。0xf0的后3个bit,0x01的8个bit,再加上0x90的前5个bit,

0000 0000 0011 0010 拼成一个16位数是 0x0032 表示字符 :2,在vim下了解一个字符的16进制码很简单,光标在该字符,按ga,底端显示结果如下:

<2>  50,  Hex 32,  Octal 062                                  2,1           All

依次下去,内容就是上面运行./test_pdu_decode 的结果: 2/2,对一阵阵的狂风,勇敢地作战.只要我的爱人,是一只小鸟

第三个子字段: 03 06 08 12 29 19 26 16

这是一个时间戳字段: 08年12月29号19时26分16秒(短消息发送时间)

二、地址参数字段

040702C4CC48489858       ========== 》Address Parameters(地址参数字段):

此字段为可变长度

参数ID号1个字节:04表示目的地址(接收方号码) 02表示发起方地址(发送方号码)

参数长度1个字节:07表示后面的数据占7个字节

号码编码模式1bit:0表示使用4bit的未知编码方案的DTMF编码 1表示使用8bit的指定编码方案的8bit编码

号码地址模式1bit:0表示使用ANSI TI.607定义的地址  1表示使用数据网络地址格式

号码类型0或者3个bit:如果号码编码模式为0,此字段忽略

号码编码方案0或者4个bit:如果号码编码模式为0或者号码地址模式为1,此字段忽略

号码个数8bit:指示号码字符个数

号码数字或者字符的编码:4bit或者8bit编码

填充字段0到7bit:保证地址参数字段为整数个字节,填充为0

将02C4CC48489858转化为2进制数据:

0000 0010 1100 0100 1100 1100 0100 1000 0100 1000 1001 1000 0101 1000

再按字段组合:

0 0 00001011 0001 0011 0011 0001 0010 0001 0010 0010 0110 0001 0110 00

从上面的字段组合可以看出:

号码编码模式取0表示使用4bit编码

号码地址模式取0表示使用ANSI TI.607定义的地址

由于号码编码模式取0没有号码类型和号码编码方案

号码个数为11个,号码为13312122616,填充字段为00

三、python转换实现地址参数字段

进制转换地址参考:二进制转换器 - 在线进制转换 - 木鱼查询

首先需要将手机号码由十六进制转换成二进制:

b = bin(int(number_change, 16))
print('十六进制转二进制后:{}'.format(b[2:]))

但有个问题,那就是关于号码中的0字段,需要转换成A,即

number_change = number.replace('0', 'A')
print(f'号码转换前:{number},转换后:{number_change}')

当前编码的是发送的短信,可以参考前面的内容,拼接语句:

bin_sum = '100000001110000001011000' + b[2:] + '00'
print(f'转二进制后完整字段内容:{bin_sum}')

之后进行十六进制转换:

hex_s = hex(int(bin_sum, 2))[2:]
print(f'转十六进制后内容输出:{hex_s}')

当前040702C4CC48489858仅进行40702C4CC48489858转换,前面的0可后面直接添加

def numbertopdu(number):number_change = number.replace('0', 'A')print(f'号码转换前:{number},转换后:{number_change}')b = bin(int(number_change, 16))print('十六进制转二进制后:{}'.format(b[2:]))bin_sum = '100000001110000001011000' + b[2:] + '00'print(f'转二进制后完整字段内容:{bin_sum}')hex_s = hex(int(bin_sum, 2))[2:]print(f'转十六进制后内容输出:{hex_s}')return hex_sphonenumber = '13312122616'
numbertopdu(phonenumber)

运行结果如下:

比较

电信CDMA PDU短信号码字段编码转换的python实现相关推荐

  1. Python学习——编码转换

    Unicode 注意:Unicode只是一个符号集,它规定了符号的二进制代码,却没有规定二进制代码如何存储. 所称的Unicode编码指的是UCS编码方式,即直接存入符号的Unicode二进制代码. ...

  2. 短信猫发送GSM 和 CDMA PDU长短信

    GSM和CDMA网络制式下发送PDU长短信实例 短信内容: [这是一封长短信,支持中文.长短信在发送的过程中,需要被拆分成多条短短信发送,而每一条短短信的长度最多仅有67个中文字符.这些被拆分的短短信 ...

  3. 使用AT指令发送PDU短信的全过程

    本文以一个实例来解说AT指令发送PDU短信的全过程,假如我要发送下面的短信: 接收号码:+8615215029639 短信内容:工作愉快! 短信中心号码:+8613800230500 一.短信中心号码 ...

  4. 3GPP PDU短信协议解析

    本文主要对3GPP PDU短信协议进行了梳理,详细讲解具体格式的使用说明. 发送短信的格式有TEXT和PDU两种,TEXT仅能支持英文字符的发送,不能发送中文短信,PDU格式短信支持7BIT.8BIT ...

  5. GSM/GPRS之三-短信格式及编码

    目录: 概述 短信传输 一.短信猫操作分为三种模式: Block.PDU 和 Text 二.短信传送有三种编码: 7 位, 8 位, UniCode 三.地址编码 四.编码示例 1.发送信息的 PDU ...

  6. 轻松获得网通、电信、铁通IP地址分配段

    轻松获得网通.电信.铁通IP地址分配段 有时搞一些跨网段的工程和应用,需要尽量准确的知道电信.网通.铁通等电信运营商的IP地址段分配情况,可网上的资料不但很少,而且经常都是N个月前的过期资料-- AP ...

  7. ME21N采购订单增强-税码字段默认值

    需求:采购订单凭证类型为ZNB1 ZNB2 ZNB3 ZNB4 ZNB7 ,税码字段默认为J2  (事务码me21n

  8. [转]轻松获得网通、电信、铁通IP地址分配段

    转自CU 有时搞一些跨网段的工程和应用,需要尽量准确的知道电信.网通.铁通等电信运营商的IP地址段分配情况,可网上的资料不但很少,而且经常都是N个月前的过期资料-- APNIC是管理亚太地区IP地址分 ...

  9. 电信卡_短信查询指令

    电信卡_短信查询指令 尊敬的用户,欢迎使用电信短信营业厅,您可以直接回复所选菜单编号(或拼音代码)进行业务受理和查询. 1.费用查询 (101)(SSHF) 实时话费 (102)(ZHYE) 帐户余额 ...

最新文章

  1. 在Ubuntu 12.04 64bit上配置,安装和运行go程序
  2. 从Excel到Python:最常用的36个Pandas函数
  3. ubuntu下命令行启动vmware某个虚拟机
  4. Android学习笔记ListView
  5. python教授_Python为何如此优秀?斯坦福教授告诉你!
  6. 后缀自动机(SAM)构造实现过程演示+习题集锦
  7. 【洛谷 P1659】 [国家集训队]拉拉队排练(manacher)
  8. 易语言python1.1模块_易语言之编写模块与引入模块
  9. Java PrintWriter close()方法与示例
  10. POI生成Web版Word文件
  11. BUFF 在C++ 中取其中一部分 并且写到固定的目录下
  12. 计算机文字录入ppt,计算机基础——文字录入.ppt
  13. linux下低格u盘,拯救U盘,一个靠谱的强制低格的工具
  14. 计算机与网络期刊多少钱,《计算机与网络》是不是核心期刊
  15. ps怎么把模糊的图片变清楚
  16. 大学生计算机基础实验文库,大学计算机基础实验指导书(ecxel)
  17. 计算机系统变慢的原因,计算机系统运行速度变慢4大原因
  18. 空间数据挖掘与空间大数据的探索与思考(三)
  19. loadrunner icrosoft Visual c++2005 sp1运行时组件,就会提示命令行选项语法错误,键入“命令/?”
  20. 【单目3D目标检测】MonoFlex论文精读与代码解析

热门文章

  1. 瓦片经纬度及行列号转换_arcgis server瓦片行列号计算
  2. STATA分数多项式回归
  3. 里昂维持汽车股“减持”评级
  4. android 字符串折线图,Android + MPAndroidChart 实现折线、柱形和饼状图
  5. hualinxu ext zbx 1.2:centos8搭建zabbix5.0(手把手 带注解)
  6. hgame-2022-week4
  7. Java---抽象类和接口
  8. pandas透视表常用方法
  9. Excel数据透视表多个行标签并列显示设置方法
  10. c语言上机第一次实验报告怎么写,C语言程序设计-实验第一次上机实验报告.doc...