最新消息

[公告2014/05/30] 如有需要將部落格中,任何一篇文章的程式碼使用在商業用途,請與我聯繫。

[公告2015/04/26] Line版的 iInfo程式與投資應用 群組已上線想加入的朋友們,請先查看 "入群須知" 再與我聯繫 Line : aminwhite5168,加入請告知身分與回答 "入群須知" 的問題。

[公告2018/04/22] 台北 Python + Excel VBA 金融資訊爬蟲課程,課程如網頁內容 金融資訊爬蟲班:台北班 Python 金融資訊爬蟲、EXCEL VBA 金融資訊爬蟲

[公告2019/01/08] 請注意:我再次重申,部落格文章的程式碼,是要提供各位參考與學習,一旦網頁改版請自行修改,別要求東要求西要我主動修改,你們用我寫東西賺錢了、交差了,請問有分我一杯羹嗎?既然賺錢沒分我,請問有什麼理由要求我修改,如果沒能力改,就花錢來找我上課。

[公告2019/12/01] 若各位有 Excel VBA 案子開發需求,歡迎與我聯繫,可接案處理。

[公告2020/05/22] 頁面載入速度慢,起因為部分JS來源(alexgorbatchev.com)失效導致頁面載入變慢,目前已做調整,請多見諒。

2017年3月31日 星期五

在Command中顯示像RW編排的內容

有時程式除錯需要列印一大塊的記憶體空間內容,在無法借助外部程式的情況下,就需要用程式來印,筆者花點時間分享一下自己除錯會用到的程式碼。
程式碼如下:
void CWizardMan::PrintData(UCHAR * ucptr, int nLength)
{
 int i, j, nRemainLength = 0, nCurrentLength = 0;
 CString csTemp = "", csTemp1 = "", csTemp2 = ""; 
 CString cs;

 cs.Format("Print Buffer data, size = %d", nLength);
 OutputDebugString(cs);

 //前面16進制顯示
 for(i = 0 ; i < 16; i++)
 {
  csTemp.Format("%02X ", i);
  csTemp1 += csTemp;
 }
 csTemp1 = "       |   " + csTemp1;

 //空白
 for(i = 1 ; i <= 80 - csTemp1.GetLength() - 16; i++)
 {
  csTemp.Format(" ");
  csTemp2 += csTemp; 
 } 

 //後面ASCCII顯示
 for(i = 0 ; i < 16; i++)
 {
  csTemp.Format("%X", i);
  csTemp2 += csTemp;
 }
 csTemp = csTemp1 + csTemp2;
 csTemp1 = "";
 csTemp2 = "";

 cs.Format("%s", csTemp);
 OutputDebugString(cs);
 OutputDebugString("-------------------------------------------------------------------------------------------------------");

 nRemainLength = nLength;
 for(i = 0 ; i < nLength ; i+=16)
 {
  if(nRemainLength > 16)
   nCurrentLength = 16;
  else
   nCurrentLength = nRemainLength;

  //前面16進制顯示
  for(j = 1 ; j <= nCurrentLength ; j++)
  {
   if(j > 10 && j < 15)
    csTemp.Format("%02X  ", ucptr[i+j-1]);
   else
    csTemp.Format("%02X ", ucptr[i+j-1]);
   csTemp1 += csTemp; 
  }

  csTemp.Format("%03X |   ", i);
  csTemp1 = csTemp + csTemp1 ;

  //空白  
  for(j = 1 ; j <= 80 - csTemp1.GetLength() - 16 ; j++)
  {
   csTemp.Format(" ");
   csTemp2 += csTemp; 
  } 

  //後面ASCCII顯示
  for(j = 1 ; j <= nCurrentLength ; j++)
  {
   if((ucptr[i + j - 1] <= 0x20) || (ucptr[i + j - 1] > 0x7F))
    csTemp.Format(".");
   else
    csTemp.Format("%c", ucptr[i + j - 1]);
   csTemp2 += csTemp;  
  }

  csTemp = csTemp1 + csTemp2;
  csTemp1 = "";
  csTemp2 = "";  
  nRemainLength -= 16;
  cs.Format("%s", csTemp);
  OutputDebugString(cs);
 }
 OutputDebugString("-------------------------------------------------------------------------------------------------------");
}