首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

比较实用的函数,调试写Log的函数

2013-12-04 
求一个比较实用的函数,调试写Log的函数求一个函数,已知道内存地址,内存大小, 要求十六进制输出这段内存,并

求一个比较实用的函数,调试写Log的函数
求一个函数,已知道内存地址,内存大小  ,
 要求十六进制输出这段内存,

  并保存某个文本文件,
  格式如下所示  

尽量把识别内存中的中文,字符,标点符号等等,类是UltraEdit



比较实用的函数,调试写Log的函数 二进制,16进制,内存显示
[解决办法]


//传入源地址,长度,输出目的地址
int ForMatBin(char* pDestBuf,char* pSrcBuf,int iSrcLen)
{
int iRet = SR_FAILED;
if (NULL == pDestBuf 
[解决办法]
 NULL == pSrcBuf)
{
return iRet;
}
int nAddr = 0;
int nLineCount = 0;
int n = 0;
int nBufferCount = iSrcLen;
char szLine[256] = {0}; 
if( 0 < iSrcLen)
{
while(1)
{
n = 0;
n += ForMatString(szLine + n,256 - n,"%p - ",pSrcBuf + nAddr);
nLineCount = 16;
if(nBufferCount < nLineCount) 
{
nLineCount = nBufferCount;
}
n += StringToHex(szLine + n,pSrcBuf + nAddr,nLineCount);

int iCount = 16 - nLineCount;
if (iCount != 0)
{
memset(&szLine[n],32,iCount*2);
}
n += StringToAsci(szLine + n + iCount*2,pSrcBuf + nAddr,nLineCount);
strcat(pDestBuf,szLine);
strcat(pDestBuf,"\n");
nAddr += 16;
nBufferCount -= 16;
if(0 >= nBufferCount) 
{
break;
}

}
return iRet;
}

int ForMatString(char* pDestBuf,int iMaxDestLen,char* pBuffer,...)
{
int iRet = SR_FAILED;
int iListCount = 0;
if (NULL == pDestBuf 
[解决办法]
 NULL == pBuffer)
{
return iRet;
}
va_list pArgList;
va_start(pArgList,pBuffer);
iListCount += _vsnprintf(pDestBuf + iListCount,iMaxDestLen - iListCount,pBuffer,pArgList);
va_end(pArgList);

if(iListCount > (iMaxDestLen - 1)) 
{
iListCount = iMaxDestLen - 1;
}
*(pDestBuf + iListCount) = '\0';
iRet = iListCount;
return iRet;
}

int StringToHex(char* pDestBuf,char* pSrcBuf,int iSrcLen)
{
int iRet = SR_FAILED;
int i = 0;
int j = 0;

if (NULL == pDestBuf 
[解决办法]
 NULL == pSrcBuf)
{
return iRet;
}
for(i = 0;i < iSrcLen; i++)
{
iRet += ForMatString(pDestBuf + iRet,256,"%02X ",(unsigned char)*(pSrcBuf + i));
j++;
if(4 == j)
{
j = 0;
iRet += ForMatString(pDestBuf + iRet,256," ");
}

if(16 > iSrcLen) 
{
for( ;i < 16;i++)
{
iRet += ForMatString(pDestBuf + iRet,256," ");
j++;
if(4 == j)
{
j = 0;
iRet += ForMatString(pDestBuf + iRet,256," ");
}
}

return iRet;
}

int StringToAsci(char* pDestBuf,char* pSrcBuf,int iSrcLen)
{
int iRet = SR_FAILED;

if (NULL == pDestBuf 
[解决办法]
 NULL == pSrcBuf)
{
return iRet;
}
for(int i = 0; i < iSrcLen; i++) 
{
//ASCII 字符表中,可显示字符代码>32
if(32 <= *(pSrcBuf + i)) 
{
iRet += ForMatString( pDestBuf + iRet, 256, "%c", *(pSrcBuf + i));
}
else
{
iRet += ForMatString( pDestBuf + iRet, 256, ".");
}

return iRet;
}



[解决办法]
void HexDump(char *buf,int len) {
    int i,j,k;
    char binstr[80];


    for (i=0;i<len;i++) {
        if (0==(i%16)) {
            sprintf(binstr,"%04x -",i);
            sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
        } else if (15==(i%16)) {
            sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
            sprintf(binstr,"%s  ",binstr);
            for (j=i-15;j<=i;j++) {
                sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');
            }
            printf("%s\n",binstr);
        } else {
            sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
        }
    }
    if (0!=(i%16)) {
        k=16-(i%16);
        for (j=0;j<k;j++) {
            sprintf(binstr,"%s   ",binstr);
        }
        sprintf(binstr,"%s  ",binstr);
        k=16-k;
        for (j=i-k;j<i;j++) {
            sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');
        }
        printf("%s\n",binstr);
    }
}


[解决办法]

[解决办法]
比较实用的函数,调试写Log的函数
[解决办法]
赵老师,你过分了。。。

热点排行