短信息的PDU格式有两种编码方式:Unicode和7位ASCII的压缩编码。
如收到7位ASCII的压缩编码,如:31D98C06 (为1234的7位压缩编码)  2进制表示如下:   8位编码 00110001 00110010 00110011 00110100   7位编码 00110001 11011001 10001100 00000110     请问怎样用Delphi实现直接将七位编码:31D98C06 翻释成:1234,希望能提供现成的函数,我实在不知该怎么写,谢谢各位大虾们,小师妹在线等待!
  

解决方案 »

  1.   

    找到C++Builder的实现代码,请能帮我译成Delphi程序?int ReturnHex(int Value) { switch (Value) { case 0: Value=0x7f; break; case 1: Value=0x3f; break; case 2: Value=0x1f; break; case 3: Value=0x0f; break; case 4: Value=0x07; break; case 5: Value=0x03; break; case 6: Value=0x01; break; case 7: Value=0x00; break; } return Value; } String __stdcall DecodeEnglish (String InputStr) { unsigned char InStr[300]; char OutStr[300]; String str; int j=0,i=0; int Point=0; int temp; memset(InStr,0,301); memset(OutStr,0,301); for(int i=0;i)
    { str="0x"+InputStr.SubString(i+1,2); InStr[i/2]=StrToInt(str); } while(j<=InputStr.Length()/2) { if(Point==0) OutStr[i]=InStr[j]&ReturnHex(Point); else OutStr[i]=((InStr[j]&ReturnHex(Point))<>(8-Point)); if(Point%7==0&&Point!=0) Point=0; else Point=Point+1; i++; j=i-(i/8); } OutStr[12]=((InStr[12]&0x07)<<5)|(InStr[11]>>(8-5)); return AnsiString(OutStr); }