`

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

 
阅读更多

接收短信有两种编码格式:
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串的整体数据格式,分别因为发送...

    PDU短信编解码demo,c语言

    PDU模式下的短信由多个部分组成,包括: 1. **Service Center Address (SCA)**:服务中心地址,通常是一个手机号码,用于指示短信应该发送到哪个SMSC。 2. **Destination Address (DA)**:目的地址,即接收短信的...

    短信UCS编码或解码工具

    在使用"短信UCS编码或解码工具"时,开发人员可以方便地处理不同编码格式之间的转换,比如从用户输入的文本(可能是UTF-8编码)转换为适合短信传输的7位编码,或者从接收到的PDU格式短信解码成可读的文本。...

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

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

    短信PDU编码解码类

    2. **短信PDU模式**:在短信发送过程中,用户可以选择文本模式或者PDU模式。文本模式适用于英文和其他简单的7位字符,而PDU模式则用于处理包含16位Unicode字符(如中文)的复杂情况。PDU模式下,用户需手动输入或...

    基于C语言的短信pdu的编码解码所有资料

    短信PDU模式是GSM 03.40标准定义的,主要用于SMSC(Short Message Service Center)与手机之间的通信。它包含控制信息和用户数据两部分,其中控制信息描述短信的特性,如短信类型、目的地址、编码方式等;用户数据则...

    C++编写短信编解码和收发模拟程序

    PDU模式包含了短信的地址信息、控制信息以及消息文本的编码。 3. **PDU编解码**:编码过程是将ASCII文本转换为PDU格式,以便于在GSM网络中传输。解码则是将接收到的PDU数据还原成可读的文本消息。这个过程中涉及到7...

    PDU短信解码器(exe)

    在GSM通信系统中,短信通常以PDU模式传输,这是一种二进制编码方式,包含了短信的各种控制信息和文本内容。对于非专业人士来说,这些编码看起来就像一堆无法理解的数据。 描述中提到的“GSM短信开发,收取中文短信...

    c# 2005 PDU短信解码编码

    - 解码PDU需要理解每个字段的意义,例如,提取出电话号码,确定短信类型(提交、接收、报告),并把7位或16位编码的文本恢复为可读的字符。 5. **C# 2005中的实现**: - 使用C# 2005,开发者可以构建自定义类库来...

    短信PDU编解码参考代码

    - "PDU Encoder (New Windows Form)"可能是一个Windows应用程序,提供用户界面来输入短信内容并生成相应的PDU编码,或者输入PDU字符串并解码成可读的文本形式。此类应用通常会包含以下几个关键功能: - 输入界面:...

    PDU 短信 解码 编码

    PDU模式是短信的一种原始表示形式,它允许数据在移动设备之间传输。在这里,我们将深入探讨PDU短信的解码和编码过程及其相关知识点。 首先,我们要理解PDU短信的基本结构。PDU短信由多个部分组成,包括SMS-SUBMIT、...

    短信猫源码(含PDU编解码)

    这部分代码会与硬件接口进行交互,发送AT命令(如AT+CMGF切换文本/PDU模式,AT+CMGS发送短信,AT+CMGL读取存储的短信等),并处理来自短信猫的响应。 对于初学者或开发者来说,此源码提供了一个了解和学习如何使用...

    SMS短信的编码解码函数集

    在PDU模式下,短信被编码为二进制字符串,包括地址信息、控制信息和消息负载。编码过程涉及到多个步骤,包括编码短信中心号码、电话号码、短信类型以及短信的7位或8位GSM 7编码的数据。 GSM编码标准,全称为Global ...

    c# 短信解码编码(带例子)

    - 解码短信内容,这通常涉及到将16进制串转换为7位或8位编码的文本,然后解码成可读的字符。 - 处理短信长度,因为PDU中的长度值可能包含了编码指示符。 5. **编码过程**: - 首先,将文本转换为其对应的7位或8...

    PDU发送接收编解码.zip GSM_8转7bit ,GSM_7转8bit,PDU_收短信, PDU_发短信

    "PDU发送接收编解码.zip"这个压缩包文件包含了关于GSM文本编码以及PDU(Protocol Data Unit)模式下短信发送和接收的相关内容。下面将详细介绍这些知识点。 首先,GSM_8转7bit的过程,这是为了将标准的8位ASCII字符...

    PDU 编解码工具

    PDU模式包含了短信的全部信息,如发送者和接收者的电话号码、短信类型、编码方式以及实际的文本内容。通过这种方式,短信可以在各种不同的手机和网络之间进行交换,而无需关心具体的硬件或软件差异。 2. **PDU编码...

    GSM短信编解码

    TPDU包含多个字段,如目的地址、源地址、消息类型、编码类型等,以及编码后的短信文本。 6. **解码过程**:在接收端,接收到的TPDU数据需要被解码,恢复出原始的文本消息。这包括解析TPDU结构,识别编码类型,然后...

    基于短信猫,采用PDU编码的短信收发java实现

    在这个类中,会调用`PduPack.java`中的方法将待发送的文本消息转化为PDU,然后通过串口将PDU数据发送给短信猫,短信猫再将其发送到指定的手机号码。 在实际应用中,开发者还需要处理各种异常情况,如串口通信失败、...

    SMS中文短信解码编码C++源代码,完整的GPRS通信类

    本文将详细讲解基于Linux环境下的C++实现的SMS中文短信解码编码,以及GPRS通信类的原理和应用。 首先,"SMS中文短信解码编码"是指在SMS通信中处理中文字符的过程。由于SMS协议最初设计时仅支持7位ASCII字符,而中文...

Global site tag (gtag.js) - Google Analytics