会员: 密码:  免费注册 | 忘记密码 | 会员登录 网页功能: 加入收藏 设为首页 网站搜索  
 安全技术技术文档
  · 安全配制
  · 工具介绍
  · 黑客教学
  · 防火墙
  · 漏洞分析
  · 破解专题
  · 黑客编程
  · 入侵检测
 安全技术论坛
  · 安全配制
  · 工具介绍
  · 防火墙
  · 黑客入侵
  · 漏洞检测
  · 破解方法
  · 杀毒专区
 安全技术工具下载
  · 扫描工具
  · 攻击程序
  · 后门木马
  · 拒绝服务
  · 口令破解
  · 代理程序
  · 防火墙
  · 加密解密
  · 入侵检测
  · 攻防演示
技术文档 > Delphi
GSM规范中的部分编码转换
发表日期:2004-03-22 00:00:00作者:b 出处:  

 在做跟手机短信相关的东东时候常遇到各种编码格式数据的转换,特写了几个函数,供参考。

 function EncodeEnglish(var s:string):string;

 var

 i,j,len:Integer;

 cur:Integer;

 t:String;

 begin

 Result:='';

 len:=Length(s);

 //j 用于移位计数

  i:=1;j:=0;

 while i<=len do

 begin

 if i<len then

 //数据变换

 cur:=(ord(s[i]) shr j) or ((ord(s[i+1]) shl (7-j)) and $ff)

 else

  cur:=(ord(s[i]) shr j) and $7f;

 FmtStr(t,'%2.2X',[cur]);

 Result:=Result+t;

 inc(i);

 //移位计数达到7位的特别处理

 j:=(j+1) mod 7;

 if j=0 then inc(i);

 end;

 end;

 //end;  

  function BinaryUniCode2Gb2312(ABinaryString:PChar;APosStart,APosEnd:integer):string;

 var

  i,iLen:integer;

  AscHexText,TmpHexStr:string;

  AsciiInt:integer ;

  AscLen,AscUniLen:integer;

  UniHexstr,GB2312:string;

 begin

  iLen:=Length(ABinaryString);

  for i:= APosStart-1 to APosEnd-1 do

   begin

  AsciiInt:=ord(ABinaryString[i]);

  TmpHexStr:=Format('%x',[AsciiInt]);

  if length(TmpHexStr)=1 then

   TmpHexStr:='0'+TmpHexStr;

  AscHexText:=AscHexText+TmpHexStr;

   end; //for

  AscLen:=Length(AscHexText);

  AscUniLen:=AscLen div 4;

   for i:=0 to AscUniLen-1 do

    begin

    UniHexstr:=Copy(AscHexText,i*4+1,4);

   // Gb2312 := Gb2312 + UnicodeToGb2312(HexAscii2DecimalInt(uniHexstr));

   end;  // for

   result := Gb2312 ;

  end;

 function WideStringToUnicode_Ex(s:WideString;ADestStr:PChar;Limit:integer):integer;

 var sLen:integer;

  buffer:array[1..1024] of char;

  tmpchar:char;

  i:integer;

 begin

 sLen:=Length(s);

 if sLen>0 then

  begin

   CopyMemory(@buffer,Pointer(s),2*SLen);

   for i:=0 to SLen-1 do

   begin

    tmpchar:=buffer[2*i+1];

    buffer[2*i+1]:=buffer[2*i+2];

    buffer[2*i+2]:=tmpchar;

   end;

   if SLen>Limit then

   SLen:=Limit;

   CopyMemory(ADestStr,@buffer,2*SLen);

   result:=SLen*2;

   result:=2*SLen;

   end

   else

   begin

    result:=0;

   end;

 end;

返回顶部】 【打印本页】 【关闭窗口

关于我们 / 给我留言 / 版权举报 / 意见建议 / 网站编程QQ群   
Copyright ©2003- 2024 Lihuasoft.net webmaster(at)lihuasoft.net 加载时间 0.0019