如何 convert 'unsigned char *' to HexString |
答題得分者是:aftcast
|
yc601065
一般會員 發表:3 回覆:5 積分:1 註冊:2009-12-15 發送簡訊給我 |
|
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
[code cpp] AnsiString as; const int buf_len = 7; //假如長度是7 unsigned char buf[buf_len] ={'A','B','C','D','E','F','G'}; char *text = new char[buf_len*2 1]; memset(text,0,buf_len*2 1); try { BinToHex(buf,text,buf_len); //這裡是重點 as = text; this->_mmo1->Lines->Add(as); } __finally { delete [] text; } [/code]
------
蕭沖 --All ideas are worthless unless implemented-- C++ Builder Delphi Taiwan G+ 社群 http://bit.ly/cbtaiwan |
yc601065
一般會員 發表:3 回覆:5 積分:1 註冊:2009-12-15 發送簡訊給我 |
|
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
unsigned char buf[buf_len] 與 Byte *ptr 是等價的,總之是可以"一樣的"
但轉換前你總要知道 ptr 指向多少個byte吧? 那就相當於我上面寫的buf_len。我是為了例子好寫,才定unsigned char buf[buf_len] 。 你試一下就知道了啊。若不行,你把你試我上面的例子貼出來看看。 ===================引 用 yc601065 文 章=================== 感謝aftcast回答 可以在請問一下如我今天宣告一指標 Type為Byte如下,也可以用此方式轉換輸出至Memo顯示嗎? Byte *ptr;
------
蕭沖 --All ideas are worthless unless implemented-- C++ Builder Delphi Taiwan G+ 社群 http://bit.ly/cbtaiwan |
yc601065
一般會員 發表:3 回覆:5 積分:1 註冊:2009-12-15 發送簡訊給我 |
[code cpp] { int buf[] ={255,10,03,20,30,65,0}; Byte *ptr; ptr=(unsigned char*)buf; const int buf_len=sizeof(ptr); char *text = new char[buf_len*2 1]; memset(text,0,buf_len*2 1); try { BinToHex(ptr,text,buf_len); //這裡是重點 ptr = text; this->_mmo1->Lines->Add(text); } __finally { delete [] text; } } [/code] 顯示結果:FF000000 |
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
[code cpp] BYTE buf[] ={255,10,03,20,30,65,0}; //一定要是BYTE (unsigned char) 或是 char,因為才會只占一個位元組的大小,如果是int就是4個bytes的大小 //Byte *ptr; //ptr=(unsigned char*)buf; // 指標取大小,永遠都是4個bytes,觀念問題! const int buf_len= sizeof(buf)/sizeof(BYTE); // 關於取陣列的大小,就像是這樣的寫法 char *text = new char[buf_len*2 1]; memset(text,0,buf_len*2 1); try { BinToHex(buf,text,buf_len); //這裡是重點 this->_mmo1->Lines->Add(text); } __finally { delete [] text; } [/code] 我想你的c 的基本功力還不夠,要再加強一些。不然這問題沒完沒了… 你原來的錯是因為 1/ 你宣告的是int的陣列,即使你的值是255,你知道嗎? 在記憶體裡長的是4個bytes的排列,即 FF 00 00 00 2/ 你以為強轉指標可以將原來的int的記憶體內容變成一個byte嗎? 不會! 它還是 FF 00 00 00 3/ 你以為要找出指標所指的內容長度只要sizeof就可以,錯了! 這樣做的結果永遠都是4,因為指標就是記憶體位址,而在32位元的系統下,它就是4個bytes 4/ 所以,結果就是你錯誤的取得 4 的長度來找一個 錯誤的int 的 FF 00 00 00 或許你對第四點還是有會"霧殺殺",但真的沒辮法了,你要先增加內力,否則無法再進階。 請結案吧! 謝謝!
------
蕭沖 --All ideas are worthless unless implemented-- C++ Builder Delphi Taiwan G+ 社群 http://bit.ly/cbtaiwan |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |