短信文本模式下的解码方法
来源:互联网 发布:安徽网站seo 编辑:程序博客网 时间:2024/05/26 08:41
接收短信有两种编码格式:
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;
- 短信文本模式下的解码方法
- PDU模式下纯英文短信的解码函数
- 短信PDU模式解码
- 短信PDU模式解码
- 短信PDU模式解码
- 在Centos下使用英伟达GPU,文本模式下发现分辨率不能修改的方法
- 短信中的的 UCS2的编码与解码方法(java)
- 文本模式下的分辨率修改
- Fedora18 文本模式下分辨率的调整
- Recovery模式下的文本显示
- Linux 修改文本模式下的分辨率
- vi模式下的文本替换
- SMS短信的PDU编码解码,附java解码源码
- 短信猫开发(2): 接收短信后的解码
- Ubuntu下纯文本模式与图形模式的转换
- Linux下jpeg解码方法
- Linux下用nvidia显卡实现硬解码的方法
- shell 下 urlencode/urldecode 编码/解码的几种方法
- wait,waitpid,waitid,wait3,wait4
- vc static控件背景设置成透明(其他控件也可以)
- setsockopt
- vsftpd中很管用的同异步信号处理代码
- 每个程序员心中的痛
- 短信文本模式下的解码方法
- javascript base64编码解码(汉字正常,但文件较大)
- 动态添加行
- JS调用方法规则
- 看完《python简明教程》笔记及第一个python程序
- 黑马程序员:java高级IO 1
- 关于栈帧
- 驱动和用户程序间共享内存
- Android网络相关