線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2754
推到 Plurk!
推到 Facebook!

字串(AABB)轉換16進位數值(0xAA, 0xBB)

尚未結案
tk.yao
一般會員


發表:2
回覆:3
積分:1
註冊:2004-05-08

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-05-08 18:26:25 IP:61.30.xxx.xxx 未訂閱
//我想這類問題應該有很多先進問過,但是我一時找不相關的討論,希望前輩們包涵指導    輸入的字串為(00112233445566778899AABBCCDDEEFF)32個字元 想轉換成unsigned char(0x00, 0x11,....0xEE, 0xFF)的陣列 小弟我的做法不知道是否有邏輯錯誤的地方或者有更簡潔的寫法?謝謝。
void StrToUintArray(AnsiString str)
{
        int i;
        int c[32];            for(i=1;i<=str.Length();i  ){
                if(str[i]=='A'|| str[i]=='a') c[i]=10;
                else if(str[i]=='B' || str[i]=='b') c[i]=11;
                else if(str[i]=='C' || str[i]=='c') c[i]=12;
                else if(str[i]=='D' || str[i]=='d') c[i]=13;
                else if(str[i]=='E' || str[i]=='e') c[i]=14;
                else if(str[i]=='F' || str[i]=='f') c[i]=15;
                else c[i] = StrToInt(str[i]);
        }            for(i=0;i<16;i  ){
                w[i]=c[(i 1)*2]^(c[((i 1)*2)-1]<<8);
        }
}
jest0024
高階會員


發表:11
回覆:310
積分:224
註冊:2002-11-24

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-05-08 18:55:43 IP:211.74.xxx.xxx 未訂閱
引言: //我想這類問題應該有很多先進問過,但是我一時找不相關的討論,希望前輩們包涵指導 輸入的字串為(00112233445566778899AABBCCDDEEFF)32個字元 想轉換成unsigned char(0x00, 0x11,....0xEE, 0xFF)的陣列 小弟我的做法不知道是否有邏輯錯誤的地方或者有更簡潔的寫法?謝謝。
void StrToUintArray(AnsiString str)
{
        int i;
        int c[32];            for(i=1;i<=str.Length();i  ){
                if(str[i]=='A'|| str[i]=='a') c[i]=10;
                else if(str[i]=='B' || str[i]=='b') c[i]=11;
                else if(str[i]=='C' || str[i]=='c') c[i]=12;
                else if(str[i]=='D' || str[i]=='d') c[i]=13;
                else if(str[i]=='E' || str[i]=='e') c[i]=14;
                else if(str[i]=='F' || str[i]=='f') c[i]=15;
                else c[i] = StrToInt(str[i]);
        }            for(i=0;i<16;i  ){
                w[i]=c[(i 1)*2]^(c[((i 1)*2)-1]<<8);
        }
}
Use HexToBin 學而時習之不亦樂乎!
tk.yao
一般會員


發表:2
回覆:3
積分:1
註冊:2004-05-08

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-05-08 20:25:16 IP:61.30.xxx.xxx 未訂閱
感謝jest0024, 但是可否進一步解釋用法,謝謝  
extern PACKAGE int__fastcall HexToBin(char *Text, char *Buffer, int BufSize);
Help裡的解釋我不太了解.
enu
中階會員


發表:36
回覆:93
積分:55
註冊:2003-10-22

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-05-08 22:19:13 IP:220.142.xxx.xxx 未訂閱
tk.yao您好,您可以參考下列網址看看: http://delphi.ktop.com.tw/topic.php?TOPIC_ID=47131 上次也剛好碰上這樣的問題, 也是看了這個例子解決了。 應該會是您要的吧!
jest0024
高階會員


發表:11
回覆:310
積分:224
註冊:2002-11-24

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-05-08 22:35:36 IP:61.60.xxx.xxx 未訂閱
引言: tk.yao您好,您可以參考下列網址看看: http://delphi.ktop.com.tw/topic.php?TOPIC_ID=47131 上次也剛好碰上這樣的問題, 也是看了這個例子解決了。 應該會是您要的吧!
HexToBin(字串指標,傳回指標,傳回的buffer size) 舉例 Byte B PChar Str HexToBin(Str,B,1); inc c[32] for(i:=0;i < strlen(str) ;i= 2){ HexToBin(*str[i 1],*c[i],1); } 學而時習之不亦樂乎! 發表人 - jest0024 於 2004/05/08 22:46:22
g6101
高階會員


發表:22
回覆:129
積分:110
註冊:2002-06-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-05-09 02:40:57 IP:61.226.xxx.xxx 未訂閱
tk.yao您好: 請參考以下的程式碼,視需求自行修改.
#include 
//---------------------------------------------------------------------------
void StrToUintArray(AnsiString str)
{
   char *p = str.c_str();
   int buflen = 16;
   unsigned char buf[16];
   for (int i=0;i < buflen;i  )
   {
     sscanf(p i*2,"X",&buf[i]);//16進位字串(二個字為一組)轉成數值傳入buf字元陣列中
   }
   //假設傳入(str)的內容為"00112233445566778899AABBCCDDEEFF"
   //此時buf內容為{0x00, 0x11,....0xEE, 0xFF}
}
◎天長地久有時盡,追求知識無絕期!
tk.yao
一般會員


發表:2
回覆:3
積分:1
註冊:2004-05-08

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-05-09 16:05:01 IP:221.169.xxx.xxx 未訂閱
真的很感謝jest0024,enu,g6101的指導, 我試過兩種作法都可以達到目的的, 呵..學到兩種撇步..
系統時間:2024-09-06 10:47:28
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!