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

手機簡訊轉成文字檔

答題得分者是:mieng
GGL
資深會員


發表:104
回覆:600
積分:335
註冊:2006-11-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-11-13 23:16:40 IP:211.76.xxx.xxx 未訂閱
請問一下如何將我已經從手機備份到電腦裡面的簡訊轉換成一般的文字檔,我的手機是SIEMENS的,我看了http://www.yesky.com/20020701/1618435_1.shtml裡面的介紹,但是西門子的簡訊好像有多加了一些東西在前後,只有中間的部份可以用上面網址裡面的方法來弄,請問一下有無什麼方法可以解碼的?(ps.我對於unocode不熟...)謝謝各位了
GGL
資深會員


發表:104
回覆:600
積分:335
註冊:2006-11-05

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-11-14 14:42:31 IP:211.76.xxx.xxx 未訂閱
以下是上面網址的完整程式碼 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<InputStr.Length();i=i 2) { 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); } //--------------------------------------------------------------------------- //英文編碼 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>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; } //--------------------------------------------------------------------------- //中文解碼 String DecodeChinese(String InputStr) { wchar_t Buf[300]; for(int i=0;i<InputStr.Length();i=i 4) { Buf[i/4]=StrToInt("0x" InputStr.SubString(i 1,4)); } Buf[InputStr.Length()/4]=0; return WideCharToString(Buf); } //--------------------------------------------------------------------------- //中文編碼 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; }
GGL
資深會員


發表:104
回覆:600
積分:335
註冊:2006-11-05

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-11-14 15:47:49 IP:211.76.xxx.xxx 未訂閱
我現在大致上已經快寫出來了,但是有一個很重要的問題... 我怎麼將*.smi的檔案內容轉換成16進位碼,我現在要將smi轉成文字檔都要先用UltraEdit將16進位碼複製到我的程式才能進行轉換的動作,但我總不能每次在轉換檔案的時候都要經過這麼步驟,而我又不知道轉換16進位該如何下手,希望各位大大幫幫我囉....謝謝了
mieng
中階會員


發表:12
回覆:97
積分:81
註冊:2003-10-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-11-18 12:02:50 IP:61.60.xxx.xxx 未訂閱
文字轉16進制我是用sprintf和itoa兩個函式來進行轉換。 itoa 可以轉成任意進制 下面是轉換函式範例 String StrToHex(String InTxt) { unsigned char rb[255]; char *jjj=""; int iii; String OutTxt="";//要設成空字串 OutTxt = "";//一定要加 sprintf(rb,"%s",InTxt.c_str()); for (int i=0;rb[i]!=0;i ) { iii=rb[i]; itoa(iii,jjj,16);//轉成16進制, OutTxt = OutTxt + (String)jjj + " "; } return OutTxt; }
GGL
資深會員


發表:104
回覆:600
積分:335
註冊:2006-11-05

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-11-18 12:45:59 IP:211.76.xxx.xxx 未訂閱
謝謝mieng,但是因為我讀進來的檔案內容並非單純的字串,而是像是亂碼的東西,所以用妳的function轉換出來的並非結果,請問一下這該如何做?謝謝 這是用UltraEdit讀出來的結果 (HEX模式) 0B 0B 02 0C 00 01 01 00 00 30 11 21 91 74 34 23 ; .........0.!t4# 00 01 07 91 88 96 23 04 80 15 04 0C 91 88 96 11 ; ...??....?? 11 11 11 00 08 30 11 21 91 74 34 23 0E 59 7D 55 ; %....0.!t4#.Y}U 4A FF 01 81 EA 5D F1 4F 86 62 FF FF FF FF FF FF ; J.獧醥 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ; FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ; FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ; FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ; FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ; FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ; FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ; FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ; FF ; (非HEX模式) 0!t4# ????% 0!t4#Y}UJ獧醥b
mieng
中階會員


發表:12
回覆:97
積分:81
註冊:2003-10-31

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-11-18 13:09:36 IP:61.60.xxx.xxx 未訂閱
嗯,將for裡的rb[i]改成讀入字串的長度,不然會讀不到0x00 再將你讀到的字串直接送進去應該就可以了,剛直接試了一下你的亂碼字串除了少部份的字不同外,大多數是一樣的,只是不知是否是因為html有些字秀不出來造成的結果。
GGL
資深會員


發表:104
回覆:600
積分:335
註冊:2006-11-05

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-11-18 13:29:38 IP:211.76.xxx.xxx 未訂閱
String StrToHex(String InTxt) { unsigned char rb[386]; char *jjj=""; int iii; String OutTxt="";//要設成空字串 OutTxt = "";//一定要加 sprintf(rb,"%s",InTxt.c_str()); for (int i=0;i<386;i ) { iii=rb[i]; itoa(iii,jjj,16);//轉成16進制, OutTxt = OutTxt (String)jjj " "; } return OutTxt; } //-------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { if(OpenDialog1->Execute()) Memo1->Text=StrToHex(OpenDialog1->FileName); } 44 3a 5c a4 e2 be f7 b3 71 b0 54 b3 6e c5 e9 5c a6 e8 aa f9 a4 6c 53 35 37 5c a4 e2 be f7 b3 c6 a5 f7 5c 32 30 30 33 2e 31 31 2e 31 38 5c 49 6e 62 6f 78 5c b6 c0 a8 71 b4 40 2d 30 34 2e 73 6d 69 0 6 0 8 f4 12 0 0 0 0 0 94 f4 12 0 4 42 6b 74 68 94 6b 74 ff ff ff ff b5 c2 68 74 c4 7f d1 77 4 0 0 0 3c 3 33 0 0 0 0 0 64 f7 12 0 3c f5 12 0 b4 33 46 0 0 e0 fd 7f 0 0 0 0 f4 3 21 0 4 0 0 0 a 0 0 0 a4 f4 12 0 d 7e d1 77 4 0 a 0 3c 3 33 0 53 8 42 0 a0 93 46 0 5a 23 42 0 d2 7 42 0 4 f5 12 0 54 8 42 0 a8 f4 12 0 90 47 96 0 4 0 0 0 c1 75 44 0 50 0 0 0 80 45 96 0 d8 f4 12 0 25 d 42 0 24 47 96 0 c7 93 40 0 4 0 0 0 14 47 96 0 69 91 40 0 14 47 96 0 7d 92 40 0 0 0 0 0 90 47 96 0 fc 4f 40 0 20 f5 12 0 ec 8e 40 0 0 0 0 0 0 0 0 0 f0 2c 96 0 dc 2b 96 0 f4 10 0 0 d1 9 42 0 f9 9 42 0 a0 93 46 0 1 a 42 0 64 f7 12 0 2 0 0 0 98 f5 12 0 0 0 0 0 a4 f5 12 0 cb c 42 0 98 f5 12 0 86 26 42 0 1 0 0 0 28 46 96 0 c 73 44 0 14 73 44 0 a8 ac 42 0 28 46 96 0 58 0 0 0 3c 3 33 0 0 0 40 0 f1 2a 42 0 0 0 0 0 0 0 0 0 0 0 0 0 e8 2b 這樣子讀出來的還是怪怪的,一開始就不對了...這是什麼原因...麻煩mieng了,謝謝!!
mieng
中階會員


發表:12
回覆:97
積分:81
註冊:2003-10-31

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-11-18 13:37:26 IP:61.60.xxx.xxx 未訂閱
可以把你要轉的檔案寄給我嗎?? mieng-chien@mieng.oep.idv.tw
GGL
資深會員


發表:104
回覆:600
積分:335
註冊:2006-11-05

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-11-18 13:58:12 IP:211.76.xxx.xxx 未訂閱
引言: 可以把你要轉的檔案寄給我嗎?? mieng-chien@mieng.oep.idv.tw
我已經寄給你了,麻煩你...謝謝
mieng
中階會員


發表:12
回覆:97
積分:81
註冊:2003-10-31

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-11-18 15:51:35 IP:61.60.xxx.xxx 未訂閱
我作了一個範例程式,含原始檔 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=40713
GGL
資深會員


發表:104
回覆:600
積分:335
註冊:2006-11-05

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-11-18 16:09:58 IP:211.76.xxx.xxx 未訂閱
謝謝mieng....
系統時間:2024-05-04 2:18:34
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!