关于手机短信息SMS开发—编码和解码(ASCII转化为7bit编码)
Yings 2002-11-12 09:45:34 我已有BCB的代码,当我不熟悉BCB,希望诸位大侠指点
String __stdcall EncodeEnglish(String InputStr)
{
int n,len,cur;
String tempstr,returnstr;
unsigned char mid1[2],mid2[2];
len=InputStr.Length();
n=0;
for(int i=1;i<=len;i++)
{
if(i<len)
{
strcpy(mid1,InputStr.SubString(i,1).c_str());
strcpy(mid2,InputStr.SubString(i+1,1).c_str());
cur=(mid1[0]>>n)|((mid2[0]<<(7-n))& 0xff);
}
else
{
strcpy(mid1,InputStr.SubString(i,1).c_str());
cur=(mid1[0]>>n)& 0x7f;
}
FmtStr(tempstr,"%2.2X",ARRAYOFCONST((cur)));
returnstr=returnstr+tempstr;
n=(n+1)%7;
if (n==0)
i++;
}
return returnstr;
}
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);
}