全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1611
推到 Plurk!
推到 Facebook!

[推薦]手機短信息SMS開發─編碼和解碼

 
axsoft
版主


發表:681
回覆:1056
積分:969
註冊:2002-03-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-07-31 11:15:00 IP:61.218.xxx.xxx 未訂閱

手機短信息SMS開發─編碼和解碼

2002-07-04‧ ‧ ‧‧C builder資源中心 資料來源: http://www.yesky.com/20020701/1618435.shtml http://www.yesky.com/20020701/1618435_1.shtml http://www.yesky.com/20020701/1618435_2.shtml 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;    }
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 以上原始碼有缺損部分,因原始網頁Source Code就以經有缺少了! [ code ][ /code ]這個Command真難用! 時間就是金錢---[ 發問前請先找找舊文章] 發表人 - axsoft 於 2002/07/31 11:20:55
cxg
中階會員


發表:116
回覆:192
積分:76
註冊:2004-02-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-10-15 17:13:31 IP:61.237.xxx.xxx 未訂閱
您好,請教您一個問題。我用手機的AT指令編寫了一個發送短消息的小程序,在發送短消息時不能超過32個漢字。請問這有什麽原應嗎。
系統時間:2024-05-16 7:34:40
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!