iInfo 資訊交流: 在Command中顯示像RW編排的內容

最新消息

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

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

[公告2017/02/20] 近來有網友詢問 MultiCharts 與 Excel 畫冰火能量圖 (8)MultiCharts 與Excel 畫冰火能量圖(11) --- 更名「台股儀表板」 文章中教學檔案取得方式,有興趣的朋友可透過 Line了解詳情 (請勿以為是免費分享),Line : aminwhite5168。

[公告2018/04/22] 台北 Python + Excel VBA 金融資訊爬蟲課程,於 7/21、7/22 兩天開課,課程如網頁內容 金融資訊爬蟲班:台北班 Python 金融資訊爬蟲、EXCEL VBA 金融資訊爬蟲,5/30 前早鳥優惠票,請盡快把握機會,歡迎券商、大專院校邀約講座。

[公告2018/06/01] 台指能量儀表板教學課程 7/14 (六) 下午 1:30 ~ 4:30,15人開班,課程如網頁內容 台北班:台指能量儀表板

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("-------------------------------------------------------------------------------------------------------");
}