7位编码长短信问题

    技术2022-05-18  22

    在刚开始对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编码包含短信头的信息编码方式,其他可以类似引伸扩展。

     


    最新回复(0)