請問關於HEX轉成文字字串 |
答題得分者是:boss.tw
|
回憶樂章
一般會員 發表:3 回覆:8 積分:2 註冊:2006-10-19 發送簡訊給我 |
|
mis881085
一般會員 發表:2 回覆:7 積分:6 註冊:2005-04-30 發送簡訊給我 |
|
回憶樂章
一般會員 發表:3 回覆:8 積分:2 註冊:2006-10-19 發送簡訊給我 |
|
mis881085
一般會員 發表:2 回覆:7 積分:6 註冊:2005-04-30 發送簡訊給我 |
sprintf是用來印在字串陣列裡面唷!!這個還蠻好用的
以下範例 cHex的值為"0xFF"也就是你要的16進制轉成字串的結果 踹踹看吧~ example... #include ..... ..... int iHex = 0xFF; char *cHex; cHex= new char[10]; sprintf(cHex,"0x%x",iHex); ShowMessage(&cHex[0]); delete [ ] cHex; ....
編輯記錄
mis881085 重新編輯於 2009-01-02 03:07:31, 註解 無‧
|
回憶樂章
一般會員 發表:3 回覆:8 積分:2 註冊:2006-10-19 發送簡訊給我 |
===================引 用 mis881085 文 章=================== sprintf是用來印在字串陣列裡面唷!!這個還蠻好用的 以下範例 cHex的值為"0xFF"也就是你要的16進制轉成字串的結果 踹踹看吧~ example... #include ..... ..... int iHex = 0xFF; char *cHex; cHex= new char[10]; sprintf(cHex,"0x%x",iHex); ShowMessage(&cHex[0]); delete [ ] cHex; .... 抱歉!! 我試了一下但是 這個不是我要的 可能是我沒有的很清楚 我想要的是可以將hex值直接轉換成中文字 或是英文 例如:"測試"就是"0xB4FAB8D5" 不過還是非常謝謝你的幫忙 |
mis881085
一般會員 發表:2 回覆:7 積分:6 註冊:2005-04-30 發送簡訊給我 |
===================引 用 回憶樂章 文 章=================== ===================引 用 mis881085 文 章=================== sprintf是用來印在字串陣列裡面唷!!這個還蠻好用的 以下範例 cHex的值為"0xFF"也就是你要的16進制轉成字串的結果 踹踹看吧~ example... #include ..... ..... int iHex = 0xFF; char *cHex; cHex= new char[10]; sprintf(cHex,"0x%x",iHex); ShowMessage(&cHex[0]); delete [ ] cHex; .... 抱歉!! 我試了一下但是 這個不是我要的 可能是我沒有的很清楚 我想要的是可以將hex值直接轉換成中文字 或是英文 例如:"測試"就是"0xB4FAB8D5" 不過還是非常謝謝你的幫忙 =============================== 如果先強迫轉型成為int 在轉成文字呢?? |
回憶樂章
一般會員 發表:3 回覆:8 積分:2 註冊:2006-10-19 發送簡訊給我 |
|
boss.tw
高階會員 發表:15 回覆:109 積分:194 註冊:2005-05-17 發送簡訊給我 |
|
回憶樂章
一般會員 發表:3 回覆:8 積分:2 註冊:2006-10-19 發送簡訊給我 |
===================引 用 boss.tw 文 章=================== 要不要 po 出 source code 大家才好幫你 你讀出的 buffer 應該是 pvoid 其實 hex 的值就是 每個字串的值,不需要轉換 只需轉型就可以,但讀出的 buffer 最後需要有結束字元,才不會後面接個不是字串的亂碼 [code cpp] PVOID test = "測試"; printf("%s\n", (char *)test); [/code] 我用下面的程式碼取得程式執行後記憶體中的東西 程式碼大概如下 [code cpp] DWORD name; Form1->Handle1=FindWindow(0,"1"); if(Form1->Handle1!=NULL) { GetWindowThreadProcessId(Form1->Handle1,&Form1->ProcID); Form1->c=OpenProcess(PROCESS_ALL_ACCESS,false,Form1->ProcID); } ReadProcessMemory(c,(void *)0X0068B614,&name,8,0); [/code] 但是我從name中取得的數值就類似這樣 "0000B4FA" 但是我想要把他轉換成中文 "測" 不知道怎樣有沒有清楚一點?
編輯記錄
回憶樂章 重新編輯於 2009-01-03 00:54:24, 註解 無‧
|
boss.tw
高階會員 發表:15 回覆:109 積分:194 註冊:2005-05-17 發送簡訊給我 |
[code cpp] String S; char *Mychar = "測試"; ShowMessage(S.sprintf("Mychar = %s", Mychar) ); short Mychar1 = 0x00B4FA; short Mychar2 = 0x00B8D5; char Mychar3[512] ={0}; Mychar3[1] = Mychar1 &0xFF; Mychar3[0] = Mychar1 >>8; ShowMessage(S.sprintf("Mychar3 = %s", Mychar3 ) ); [/code]
編輯記錄
boss.tw 重新編輯於 2009-01-06 13:22:13, 註解 無‧
|
回憶樂章
一般會員 發表:3 回覆:8 積分:2 註冊:2006-10-19 發送簡訊給我 |
===================引 用 boss.tw 文 章=================== [code cpp] String S; char *Mychar = "測試"; ......... [/code] 抱歉 上面的程式碼我還是不太懂 因為那樣不是只能用自己設定的字嗎? 但是如果記憶體中讀出來的是 "測A試"的HEX 那要怎麼辦? 我用下面的寫法把他們全部合起來到一個String中 但是該怎麼血才能把真正的文字印出來? [code cpp] Byte name; short Mychar=0x000000; AnsiString addr; char *word=new char; for(int i=0;i<16;i ) { ReadProcessMemory(c,Pointer(NAME_ADR i),&name,4,0); if(name!=0x00) { addr =IntToHex(int(name),1); } } ShowMessage(addr); char *cHex=new char[10]; sprintf(cHex,"0x%s",addr); ShowMessage(cHex) [/code] |
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
boss.tw
高階會員 發表:15 回覆:109 積分:194 註冊:2005-05-17 發送簡訊給我 |
我沒用過 ReadProcessMemory
我看 help 說明第四個參數是指讀出的長度 DWORD nSize, // number of bytes to read 但是我看你的nSize =4 , name 是宣告 byte name; 看起來是有問題的 試試以下這段 [code cpp] Byte name[4] ={0}; char cHex[512] ={0}; for(int i=0; i<16;i ) { ReadProcessMemory(c,Pointer(NAME_ADR i),&name,4,0); memcpy( &cHex[i*4], &name[i*4], 4 ); } ShowMessage(cHex); [/code] 以下是我測試的方法 [code cpp] BYTE temp[4] ={0}; sprintf(temp, "測試看看有什麼問題A測試看看有什麼問題A測試看看有什麼問題A"); Byte name[4] ={0}; char cHex[512] ={0}; for(int i=0; i<16;i ) { //ReadProcessMemory(c,Pointer(NAME_ADR i),&name,4,0); memcpy( &cHex[i*4], &temp[i*4], 4 ); } ShowMessage(cHex); [/code] |
回憶樂章
一般會員 發表:3 回覆:8 積分:2 註冊:2006-10-19 發送簡訊給我 |
===================引 用 boss.tw 文 章=================== 我沒用過 ReadProcessMemory 我看 help 說明第四個參數是指讀出的長度 DWORD nSize, // number of bytes to read 但是我看你的nSize =4 , name 是宣告 byte name; 看起來是有問題的 試試以下這段 [code cpp] Byte name[4] ={0}; char cHex[512] ={0}; for(int i=0; i<16;i ) { ReadProcessMemory(c,Pointer(NAME_ADR i),&name,4,0); memcpy( &cHex[i*4], &name[i*4], 4 ); } ShowMessage(cHex); [/code] 以下是我測試的方法 [code cpp] BYTE temp[4] ={0}; sprintf(temp, "測試看看有什麼問題A測試看看有什麼問題A測試看看有什麼問題A"); Byte name[4] ={0}; char cHex[512] ={0}; for(int i=0; i<16;i ) { //ReadProcessMemory(c,Pointer(NAME_ADR i),&name,4,0); memcpy( &cHex[i*4], &temp[i*4], 4 ); } ShowMessage(cHex); [/code] 哇~~終於成功了 完全沒有想過可以用那個專研常用的memcpy 謝謝你拉 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |