`

短信文本模式下的解码方法

 
阅读更多

接收短信有两种编码格式:
1.中英文混合的为unicode
2.英文的为7BIT编码。
以7BIT编码为例子,如接收到PDU码为
0891683108502905F0040D91685159296028F30000701021216182230947759B4C0F93E967
08 //短消息中心长度
91 //短消息中心有国家编码 没有为81
683108502905F0//短信中心号码
685159296028F3//发送方手机号码
0000//编码格式=7BTT格式(0008为unicode)
70102121618223//时间
09//消息长度
47759B4C0F93E967//短信内容,7BIT解码为:Gjmdtadtg

附DELPHI中对unicode和7BIT解码函数

//unicode解码
function U2GB(Str: string): string;
var s: pchar;
i: integer;
tmp: string;
begin
tmp := '';
result := '';
s := PChar(str);
i := 0;
while i < length(s) do
begin
tmp := tmp + chr(HexToInt(s[i + 2] + s[i + 3])) + chr(HexToInt(s + s[i + 1]));//unicode转换时,高低位互换
inc(i, 4);
end;
result := widechartostring(pWideChar(tmp + #0#0#0#0));
end;

 

//7BIT短信内容解码
function TFrm_DtuCall.gsmDecode7bit(pSrc:string; nSrcLength:Integer):string;
//pSrc内容
//nSrcLength内容长度
var
nSrc:Integer; // 源字符串的计数值
nByte:Integer; // 当前正在处理的组内字节的序号,范围是0-6
nLeft:Byte; // 上一字节残余的数据
tmpChar:Byte;
pDst:string;

begin

// 计数值初始化
nSrc := 1;

// 组内字节序号和残余数据初始化
nByte := 0;
nLeft := 0;
pdst := '';
// 将源数据每7个字节分为一组,解压缩成8个字节
// 循环该处理过程,直至源数据被处理完
// 如果分组不到7字节,也能正确处理
while (nSrc < nSrcLength) do
begin
tmpChar := byte(StrToInt('$' + pSrc[nsrc] + pSrc[nsrc + 1]));
// 将源字节右边部分与残余数据相加,去掉最高位,得到一个目标解码字节
pDst := pDst + Char(((tmpchar shl nByte) or nLeft) and $7F);
// 将该字节剩下的左边部分,作为残余数据保存起来
nLeft := tmpChar shr (7 - nByte);

// 修改字节计数值
Inc(nByte);

// 到了一组的最后一个字节
if (nByte = 7) then
begin
// 额外得到一个目标解码字节
pdst := pDst + Char(nLeft);

// 组内字节序号和残余数据初始化
nByte := 0;
nLeft := 0;
end;

// 修改源串的指针和计数值

nSrc := nSrc + 2;
end;
// 返回目标串长度
result := pdst;
end;

分享到:
评论

相关推荐

    GSM-PDU模式短信编解码-java代码

    1、短信传输分三种模式:Block(淘汰)、Text(纯文本模式,用处受限,不能实现中文)、PDU(手机默认的短信模式,可以使用任何字符集) 2、PDU编码主要包括两个主要的部分:一是PDU串的整体数据格式,分别因为发送...

    C#使用GSM Modem的文本短信编码和解码

    GSM Modem 短信的编码和解码 在收发短信方面,按时间产生先后,共产生了三种模式:Block Mode、基于AT指令的Text Mode、基于AT指令的PDU Modem, Text Mode比较简单,多款诺基亚手机均支持该模式。西门子的手机大多只...

    GSM短消息&长短信解码

    在收发短信方面,按时间产生先后,共产生了三种模式:Block Mode、基于 AT 指令的 Text Mode、基于 AT 指令的 PDU Modem。 Text Mode 是纯文本方式, 可使用不同的字符集,主要用于欧美地区。从技术上说也可用于发送...

    简易的VB短信发送代码,支持PDU编码,AT测试终端

     简易的VB发短信小程序源代码,支持PDUmgscodeVB AT测试终端以及PDU编码等,请注意,发送信息的时候以PDU模式发送文本,必须确保终端是PDU模式,选中后终端将处于PDU模式,勾除后终端处于Text模式。  其它代码...

    SnSitesV1.0.1共享版本

    I2-1,N种文本产品列表数据调用方法.如最新产品,最新推荐,热门商品等 I2-2,N种图形排列数据调用方法.如九大推荐商品,九大热门商品等. I2-3,任意栏目商品数据调用; I2-4,商品参数功能与商品功能指数功能;可详尽描述...

    postknit.github.io:提花织机明信片

    初始模式 短信“我&lt;3&gt; class),请优化为 Java 字节码 编译为“PostKnit”,穿Kong卡片指令(ascii,十六进制?) 创建打Kong卡 打印、打Kong和邮寄! 读取打Kong卡并执行 跑通读卡器 两个输出: 在屏幕上:从 ...

    Visual C++/Turbo C串口通信编程实践及源代码-2

    12.1.3 在不同操作系统下选用哪种驱动程序模式 341 12.2 vxd示例程序介绍--vtoolsd中的commhook 341 12.3 串口数据捕捉实例程序 351 12.3.1 编程任务 351 12.3.2 编程步骤 351 12.4 虚拟串口简介 364 附录a ...

    Visual C++_Turbo C 串口通信编程实践.(电子工业.龚建伟.熊光明) 源码光盘

    12.1.3 在不同操作系统下选用哪种驱动程序模式 341 12.2 VxD示例程序介绍——VToolsD中的CommHook 341 12.3 串口数据捕捉实例程序 351 12.3.1 编程任务 351 12.3.2 编程步骤 351 12.4 虚拟串口简介 364 附录A Turbo ...

    Visual C++_Turbo C 串口通信编程实践.(电子工业.龚建伟.熊光明) 第二版 电子版

    12.1.3 在不同操作系统下选用哪种驱动程序模式 341 12.2 VxD示例程序介绍——VToolsD中的CommHook 341 12.3 串口数据捕捉实例程序 351 12.3.1 编程任务 351 12.3.2 编程步骤 351 12.4 虚拟串口简介 364 附录A Turbo ...

    Visual C++/Turbo C串口通信编程实践及源代码-3

    12.1.3 在不同操作系统下选用哪种驱动程序模式 341 12.2 vxd示例程序介绍--vtoolsd中的commhook 341 12.3 串口数据捕捉实例程序 351 12.3.1 编程任务 351 12.3.2 编程步骤 351 12.4 虚拟串口简介 364 附录a ...

    Visual C++/Turbo C串口通信编程实践 及源代码-1

    12.1.3 在不同操作系统下选用哪种驱动程序模式 341 12.2 vxd示例程序介绍--vtoolsd中的commhook 341 12.3 串口数据捕捉实例程序 351 12.3.1 编程任务 351 12.3.2 编程步骤 351 12.4 虚拟串口简介 364 附录a ...

    DingTalk_v3.5.0

    在此模式下,信息不能被复制,用户不用担心被录音,姓名、头像都会被打马赛克。 3.聊天内容在已读后30秒内消失,不留痕迹。如同在澡堂一般,只能“看在眼里、烂在心里”,保证重要信息沟通隐私安全。 4.针对安全...

    手机 pdf 阅读器

    再次改进图片的阅读能力,小于100K的图片采用系统解码,采用高内存方式解码,&gt;500K采用流式解码,对于ZIP中&gt;256K的图片不再解码 修正阅读zip中大图片错误的bug 修正阅读中途出现排版错误的bug 背景图片加载的速度...

    java源码包---java 源码 大量 实例

     Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...

    java源码包2

     Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...

    java源码包3

     Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...

    java源码包4

     Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...

    功能非常全面的一个论坛源码

    原先UBB参数设置中的发帖模式作用目前刚好相反,比如原先设为普遍模式现在将视为高级模式 .增强一些论坛编码 - 图片允许批定高度和宽度,格式为[IMG=边框粗细,排版方式,高度,宽度] - 允许单独指定文字的背景色,格式...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Java波浪文字制作方法及源代码 1个目标文件 摘要:Java源码,初学实例,波浪文字 Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,...

Global site tag (gtag.js) - Google Analytics