sms 7bit编码_Big_Huang_JS的博客-程序员宅基地

技术标签: c  sms  其他  

 
关于短信内容格式及压缩方法今天研究了一下收发短信,8位编码转7位编码研究了半天,弄的一头雾水,最后还是在网上找到答案。 如下: 网短信压缩格式在TP-DCS中指示,TP-DCS在《GSM03.38》中有说明,一般都采用将7bit编码压缩成8bit编码方式,这种压缩方式也在《GSM03.38》中有详细说明。
     压缩编码方式将8字节的7bit编码压缩成7字节的8bit编码,也就是说160字节长短信可以压缩为140字节的短信,压缩了20字节,
    具体压缩方法如下: 原始的8字节未压缩编码如下: - bits number: 6 5 4 3 2 1 0 1a 1b 1c 1d 1e 1f 1g 2a 2b 2c 2d 2e 2f 2g 3a 3b 3c 3d 3e 3f 3g 4a 4b 4c 4d 4e 4f 4g 5a 5b 5c 5d 5e 5f 5g 6a 6b 6c 6d 6e 6f 6g 7a 7b 7c 7d 7e 7f 7g 8a 8b 8c 8d 8e 8f 8g 经过压缩后的8bit编码如下: - eight characters in seven octets: - bits number: 7 6 5 4 3 2 1 0 2g 1a 1b 1c 1d 1e 1f 1g 3f 3g 2a 2b 2c 2d 2e 2f 4e 4f 4g 3a 3b 3c 3d 3e 5d 5e 5f 5g 4a 4b 4c 4d 6c 6d 6e 6f 6g 5a 5b 5c 7b 7c 7d 7e 7f 7g 6a 6b 8a 8b 8c 8d 8e 8f 8g 7a   
    从以上的压缩方法可以看出,第一个压缩后字节是第一个7bit在最高位加上第二个7bit的最低位,第二个压缩字节是第二个7bit的高六位加上第三个7bit的低两位,依次类推。 第七个压缩后字节(最后一个压缩字节)是第七个7bit的最高位加上整个第八个7bit的七位。这样就实现了将8个字节的7bit编码压缩成7个字节的8bit编码。
     举一个具体的例子,字符串3132333435363738是7bit编码,现压缩成8bit编码。 3132333435363738转换为bit为00110001(31) 00110010(32) 00110011(33) 00110100(34) 00110101(35) 00110110(36) 00110111(37) 00111000(38),进行转换,
 
    过程如下: a,转换31,32的最低位到31的最高位,可以看到31不变,第一个压缩后字节为31 b,转换32,32由于取了最低位,相当于向右移了一位,为00011001,将33的低两位放在右移一位的31高位上,也就为11011001,即D9。 c,转换33,33由于取了低两位,相当于向右移了两位,为00001100,将34的低三位放在右移两位的33高位上,也就为10001100,即8C。 d,转换34,34由于取了低三位,相当于向右移了三位,为00000110,将35的低四位放在右移三位的34高位上,也就为01010110,即56。 e,转换35,35由于取了低四位,相当于向右移了四位,为00000011,将36的低五位放在右移四位的35高位上,也就为10110011,即B3。 f,转换36,36由于取了低五位,相当于向右移了五位,为00000001,将37的低六位放在右移五位的36高位上,也就为11011101,即DD。 g,转换37,37由于取了低六位,相当于向右移了六位,为00000000,将整个38的七位放在右移六位的37高位上,也就是1110000,即70。 到此7位编码的3132333435363738压缩为了7字节的31D98C56B3DD70,也就是说压缩掉了一字节。 在进行编码实现时,可以将压缩前的短信每8字节为一组进行处理,处理为压缩后的七字节,这样形成外层循环。循环次数为短信长度除以8再向上取整,例如11/8=1, 1+1 = 2,也就是经过两次循环。进行内层循环处理时,需要进行七次循环,循环到n(0<n<8)次时,首先将当前字节右移n-1位,取后一字节的低n位,放在当前字节右移n-1位后的高n位,这样就可以完成对8字节的压缩,进而完成对整个短信的压缩。
 
   

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/huangtonggao/article/details/6905261

智能推荐

python爬虫之requests模块_weixin_33827590的博客-程序员宅基地

一. 登录事例a. 查找汽车之家新闻 标题 链接 图片写入本地import requestsfrom bs4 import BeautifulSoupimport uuidresponse = requests.get( 'http://www.autohome.com.cn/news/')response.encoding = 'gbk'so...

oracle 数据泵介绍,ORACLE-数据泵_正义网的博客-程序员宅基地

oracle通过数据泵进行导入导出(impdp/expdp),区别于普通的导入导出(imp/exp),导出的文件不通用,数据泵导出的只能数据泵进行导入。数据泵导出速度要比普通的exp导出要快,但需要在数据库服务器上才能导出,不能远程导出。1.导出expdp 帐号/密码 directory=路径 tables=导出的表名(可选) dumpfile=导出文件名(abc.dmp) logfile=日志...

这样讲 Netty 中的心跳机制,还有谁不会?_Java知音_的博客-程序员宅基地

作者:永顺segmentfault.com/a/1190000006931568基础何为心跳顾名思义, 所谓心跳, 即在 TCP 长连接中, 客户端和服务器之间定期发送的一种特殊的数据包...

php安装图,1.php安装_kdbshi的博客-程序员宅基地

认识PHPPHP(“PHP: Hypertext Preprocessor”,超文本预处理器的字母缩写)是一种被广泛应用的开放源代码的多用途脚本语言,它可嵌入到 HTML中,尤其适合 web 开发。PHP 能做任何事。PHP 主要是用于服务端的脚本程序,因此可以用 PHP 来完成任何其它的 CGI 程序能够完成的工作,例如收集表单数据,生成动态网页,或者发送/接收 Cookies。但 PHP 的功...

随便推点

Itween 旋转一个物体_海涛高软的博客-程序员宅基地

using System.Collections;using System.Collections.Generic;using UnityEngine;public class test : MonoBehaviour { // Use this for initialization void Start () { } // Update is calle...

C与OC、C++的区别_tanlihonged的博客-程序员宅基地_oc和c++

C语言的特点:1)C语言是结构化语言,层次清晰,调试和维护比较容易2)表现能力和处理能力比较强,可直接访问内存的物理地址3)c语言实现对硬件的编辑,c语言课用语系统软件的开发,也可用语应用软件的开发,是集高级语言和低级语言的功能一体。4)C语言效率高,可移植性强。C++语言特点:1、在C语言的基础上进行扩充和完善,使C++兼容了C语言的面向过程特点,又成为了一种面向

先进的React GUI编辑器 — Structor,所见即所得!_weixin_30587927的博客-程序员宅基地

先进的React GUI编辑器 — Structor https://helmetrex.com/手把手教你基于 ES6 架构自己的 React Boilerplate 项目http://www.open-open.com/lib/view/open1462013660085.htmlhttp://jiji262.github.io/awesome-...

PyTorch 量化 原理与复现_Puppy_L的博客-程序员宅基地_pytorch训练后量化

   神经网络的量化是指将浮点数的权重和(或)activation用定点数表示,此外,比较完全的量化还希望整个网络的数学运算全部是基于定点数的数学运算。对于定点数来讲,小数点的选取是人为的,(例如一个3比特的定点数的二进制形式为101,如果我们把小数点定在第一位之前,这个数就表示0.625;如果把小数点放在最后一位之后,就表示5)因此也往往称定点数量化为整数量化。   深度神经网络的量化方法有很多,但目前工业界的主流是INT8量化,即量化位宽为8比特 [1]。个人总结认为选用8比特位宽的主要原因有两个:

x32,x64下安装OleDB驱动_honeyasong的博客-程序员宅基地_oledb x64

Office 2007 x32,Win7 x64 安装OleDB驱动Office 2007、2010的Ace引擎都是Microsoft.ACE.OLEDB.12.0,这点从微软AccessDatabaseEngine包中可以得知。下面我们就来解决x32、x64下OLE驱动的安装。 Microsoft Access 2010 数据库引擎可再发行程序包Acces

3.1 ZK客户端创建节点源码解析上(基于NIO)_YolynHou的博客-程序员宅基地

ZK客户端创建节点源码解析前言1. 为什么能用来做注册中心2. 创建节点2.1 ZooKeeper#create()方法2.2 ClientCnxn#queuePacket()方法前言众所周知!Zookeeper是一个分布式协调工具,我们能利用它特性来做特定的事情,如,利用创建节点的唯一性和有序性可以用来实现分布式锁、leader选举、分布式队列(消息),利用临时节点及其事件监听可以用来做缓存、分布式配置中心、注册中心等,其实目前最常见的就是拿它用来做注册中心。那我们今天来看看为什么能利用他来做注册中

推荐文章

热门文章

相关标签