记录一个打印内存的日志函数
在调试代码的时候,经常需要dump一段内存,有时候不得不自己动手写一个函数。
现在先记录一个简单版本的内存打印函数。
const char* hexstr = "0123456789ABCDEF"; void dump(int level, const char* tag, const uint8_t* data, uint32_t length) { #define _CNT_PER_LINE (1 << 4) char buffer[_CNT_PER_LINE * 3 + 10 + 2]; int offset = 0; uint32_t addr; printf("[%s] dump %u byte(s):\n", tag, length); for (uint32_t i=0; i<length; ) { if (!(i & (_CNT_PER_LINE - 1))) { addr = (uint32_t)&data[i]; buffer[offset++] = hexstr[(addr >> 28) & 0x0F]; buffer[offset++] = hexstr[(addr >> 24) & 0x0F]; buffer[offset++] = hexstr[(addr >> 20) & 0x0F]; buffer[offset++] = hexstr[(addr >> 16) & 0x0F]; buffer[offset++] = hexstr[(addr >> 12) & 0x0F]; buffer[offset++] = hexstr[(addr >> 8) & 0x0F]; buffer[offset++] = hexstr[(addr >> 4) & 0x0F]; buffer[offset++] = hexstr[(addr >> 0) & 0x0F]; buffer[offset++] = ':'; buffer[offset++] = ' '; } buffer[offset++] = hexstr[(data[i] >> 4) & 0x0F]; buffer[offset++] = hexstr[data[i] & 0x0F]; i++; if (i & (_CNT_PER_LINE - 1)) { buffer[offset++] = ' '; } else { buffer[offset++] = '\n'; buffer[offset] = '\0'; printf("%s", buffer); offset = 0; } } if (offset) { buffer[offset++] = '\n'; buffer[offset] = '\0'; printf("%s", buffer); } }
可以改进的地方:
1、将buffer从外部传进来;
2、将print函数由形参传进来;
3、在每一行的后面打印内存对应的ASCII字符。
如果转载,请注明出处。https://www.cnblogs.com/ssdq/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!