7位编码长短信问题

在刚开始对7位编码长短信时,在网上看了很多资料,发现对这个都不太理解。做完后总结一下,希望对有点用处。

 

普通的7位压缩编码,我在这里不做过多描述。(23.040)

 

1.   我们大部分的思路就是按照短信头加7bits编码 如:

0051000B813167309125F10000FF0905000344020131D90C

这种方式就是基本的组合09=6+3 6是头长度,3是字符个数,后面的数字将减去特别描述),你会发现这种方式会发送失败或者发送到另外的手机会显示乱码。

 

2.     我们先看看协议描述(图 23.040 协议 9.2.3.24(a)  看不到图的请看描述的协议文档图

     

     UDL表示所有长度,UDHL表示短信头长度,请大家注意到在UDHUD中间包含一个Fill bits,而这个Fill bits就是一个关键点。8bits/UCS2编码的都没有这个Fill bits

3.       050003440201头是没有问题的,但是它占用6*8 = 7*7 – 1 bits。相当于77bits字符加上1位偏移量。所以在我们编码是应该从这1位偏移量开始计算,即“123”在含有6个头字节的短信中编码应该为:62B219

  1 0110001  -> 01100010 (偏移位)

  2 0110010  -> 10110010 

  3 0110011  -> 00011001

而因为6UDH占用7个字符那么正确的编码应该为:

0051000B813167309125F10000FF0A05000344020162B219

0A=7+3

那么同样长短信第二条为:

0051000B813167309125F10000FF0A05000344020262B219

4.       同样当我们发带有端口号的长短信为

0051000B813167309125F10000FF0C0B0003440201050412345678

0B=头长度;00=长短信;05=带端口号;12345678=源、目的端口号,而0B0003440201050412345678总共12*8=14*7-2,那么偏移量为2 那么移位后数据应该为:C46433

  1 0110001  -> 11000100  (偏移位)

  2 0110010  -> 01100100

  3 0110011  -> 00110011

那么正确的编码后数据应该为:

0051000B813167309125F10000FF110B0003440201050412345678C46433

同样长短信第二条可以为:

0051000B813167309125F10000FF110B0003440202050412345678C46433

5. 这样就介绍了7Bits编码包含短信头的信息编码方式,其他可以类似引伸扩展。

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值