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

我看你有戏 2013-11-28 03:16:03
求一个函数,已知道内存地址,内存大小 ,
要求十六进制输出这段内存,

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

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



...全文
185 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
yu.sang 2013-11-29
  • 打赏
  • 举报
回复
引用 5 楼 zhao4zhong1 的回复:
对电脑而言没有乱码,只有二进制字节;对人脑才有乱码。啊 GBK:0xB0 0xA1,Unicode-16 LE:0x4A 0x55,Unicode-16 BE:0x55 0x4A,UTF-8:0xE5 0x95 0x8A
突发奇想,百度了这句话,百度给出的前五条都是赵老师的。
healer_kx 2013-11-29
  • 打赏
  • 举报
回复
赵老师,你过分了。。。
碼上道 2013-11-29
  • 打赏
  • 举报
回复
赵4老师 2013-11-29
  • 打赏
  • 举报
回复
引用 6 楼 shangyu0801 的回复:
[quote=引用 5 楼 zhao4zhong1 的回复:] 对电脑而言没有乱码,只有二进制字节;对人脑才有乱码。啊 GBK:0xB0 0xA1,Unicode-16 LE:0x4A 0x55,Unicode-16 BE:0x55 0x4A,UTF-8:0xE5 0x95 0x8A
突发奇想,百度了这句话,百度给出的前五条都是赵老师的。[/quote] 目标:前一千条都是我的!
赵4老师 2013-11-28
  • 打赏
  • 举报
回复
对电脑而言没有乱码,只有二进制字节;对人脑才有乱码。啊 GBK:0xB0 0xA1,Unicode-16 LE:0x4A 0x55,Unicode-16 BE:0x55 0x4A,UTF-8:0xE5 0x95 0x8A
我看你有戏 2013-11-28
  • 打赏
  • 举报
回复
引用 3 楼 zhao4zhong1 的回复:
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);
    }
}
中文好像显示不出,英文是可以的
赵4老师 2013-11-28
  • 打赏
  • 举报
回复
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);
    }
}
版主大哥 2013-11-28
  • 打赏
  • 举报
回复
格式如:

[2013-11-28-15_24_17]:[Info][ThreadId=6576]接收客户端-924-消息:
MEMADDR	---1--2--3--4---5--6--7--8--Hex-2--3--4---5--6--7--8   ---ASCII CODE---
00BE9060 - 0E 00 00 00  00 00 00 00  00 03 00 01  00 02        ..............
[2013-11-28-15_24_17]:[Info][ThreadId=6576]发送客户端-924-消息:
MEMADDR	---1--2--3--4---5--6--7--8--Hex-2--3--4---5--6--7--8   ---ASCII CODE---
00BEB0A0 - 22 00 9C 03  00 00 00 00  01 17 00 04  00 02 00 B7  "...............
00BEB0B0 - FE CE F1 C6  F7 B7 B1 C3  A6 21 00 00  00 00 00 00  .........!......
00BEB0C0 - 00 00                                               ..
[2013-11-28-15_24_17]:[Info][ThreadId=6576]接收客户端-924-消息:
MEMADDR	---1--2--3--4---5--6--7--8--Hex-2--3--4---5--6--7--8   ---ASCII CODE---
030AD198 - 21 00 00 00  00 00 00 00  00 16 00 5F  00 02 78 9C  !.........._..x.
030AD1A8 - 3B 53 9C C8  70 06 0D 18  1A 62 08 01  00 10 85 1B  ;S..p....b......
030AD1B8 - 83                                                  .
[2013-11-28-15_24_17]:[Info][ThreadId=6576]发送客户端-924-消息:
MEMADDR	---1--2--3--4---5--6--7--8--Hex-2--3--4---5--6--7--8   ---ASCII CODE---
00BE9060 - 22 00 9C 03  00 00 00 00  03 17 00 04  00 02 00 B7  "...............
00BE9070 - FE CE F1 C6  F7 B7 B1 C3  A6 21 00 00  00 00 00 00  .........!......
00BE9080 - 00 00                                               ..

版主大哥 2013-11-28
  • 打赏
  • 举报
回复

//传入源地址,长度,输出目的地址
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;
}


64,651

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧