1、 英文编码 
  缺省的GSM字符集为7位编码,ASCII码为8位编码,编码就是将8位ASCII编码转换为7位编码。 
  例如:1234 编码后得到31D98C06 
  2进制表示 
  8位编码 00110001 00110010 00110011 00110100 
  7位编码 00110001 11011001 10001100 00000110 
  通过例子可以看出,将ascii8位编码的Bit8去掉,依次将下7位编码的后几位逐次移到前面,形成新的8位编码。 
  以下是C++Builder的实现代码: 
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
{ 
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; 
) 
 
 
手机短信息SMS开发—编码和解码
 
 
 
2002-07-04· · ··C++builder资源中心
 
上一页  1 2 3  下一页
  2、英文解码 
  简单地说就是将7位字符编码转换为8为字符编码 
  以下是C++Builder的实现代码: 
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); 
) 
 
 
   
 3、中文编码 
  中文编码较为简单,就是将GB2312的中文编码转换为代码页为CP936的Unicode编码即可 
  以下是C++Builder的实现代码 
String EncodeChinese(String InputStr) 
{ 
int cur; 
String tempstr,returnstr; 
WideString ws; 
wchar_t mid[2]; 
ws=WideString(InputStr); 
for(int i=1;i<=ws.Length();i++) 
{ 
wcscpy(mid,ws.SubString(i,1).c_bstr()); 
cur=mid[0]; 
FmtStr(tempstr,"%4.4X",ARRAYOFCONST((cur))); 
returnstr=returnstr+tempstr; 
} 
return returnstr; 
} 
 
  4、中文解码 
  将代码页为CP936的Unicode编码转换为GB2312的中文编码即可 
  以下是C++Builder的实现代码 
String DecodeChinese(String InputStr) 
{ 
wchar_t Buf[300]; 
for(int i=0;i
{ 
Buf[i/4]=StrToInt("0x"+InputStr.SubString(i+1,4)); 
} 
Buf[InputStr.Length()/4]=0; 
return WideCharToString(Buf); 
} 
ChangNing(Redpower) 
changning@telekbird.com.cn 
 
2、英文解码 
  简单地说就是将7位字符编码转换为8为字符编码 
  以下是C++Builder的实现代码: 
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); 
}  
3、中文编码 
  中文编码较为简单,就是将GB2312的中文编码转换为代码页为CP936的Unicode编码即可 
  以下是C++Builder的实现代码 
String EncodeChinese(String InputStr) 
{ 
int cur; 
String tempstr,returnstr; 
WideString ws; 
wchar_t mid[2]; 
ws=WideString(InputStr); 
for(int i=1;i<=ws.Length();i++) 
{ 
wcscpy(mid,ws.SubString(i,1).c_bstr()); 
cur=mid[0]; 
FmtStr(tempstr,"%4.4X",ARRAYOFCONST((cur))); 
returnstr=returnstr+tempstr; 
} 
return returnstr; 
}  
  4、中文解码 
  将代码页为CP936的Unicode编码转换为GB2312的中文编码即可 
  以下是C++Builder的实现代码 
String DecodeChinese(String InputStr) 
{ 
wchar_t Buf[300]; 
for(int i=0;i
{ 
Buf[i/4]=StrToInt("0x"+InputStr.SubString(i+1,4)); 
} 
Buf[InputStr.Length()/4]=0; 
return WideCharToString(Buf); 
} 
ChangNing(Redpower) 
changning@telekbird.com.cn