十六进制调试显示数据

it2026-08-18  5

在嵌入式开发中,不管是驱动调试还是应用协议开发,经常需要十六进制打印数据,供调试使用。以下是C实现的一个十六进制输出的函数,感觉挺实用的,供参考

#define BIN2CHAR(ch) (((ch) > ' ' && (ch) <= '~') ? (ch) : '.') void dumphex(unsigned char *buf, int len) { char membuf[1024] = {0}; unsigned char *ptr = (unsigned char *) buf; char *ibuf = membuf; int i, j; int len1, len2; len1 = len / 16 * 16; len2 = len % 16; ibuf[0] = 0; for (i = 0; i < len1; i += 16) { ibuf = membuf; sprintf(ibuf, "0x%08X ", (int) buf + i); ibuf += 12; for (j = 0; j < 16; j++) { sprintf(ibuf, "%02X ", ptr[j]); ibuf += 3; } sprintf(ibuf, " "); ibuf += 2; for (j = 0; j < 16; j++) { sprintf(ibuf, "%c", BIN2CHAR(ptr[j])); ibuf++; } sprintf(ibuf, "\r\n"); printf("%s", membuf); ptr += 16; } if (len2 == 0) { return; } ibuf = membuf; sprintf(ibuf, "0x%08X ", (int) buf + ((len >> 4) << 4)); ibuf += 12; for (i = 0; i < len2; i++) { sprintf(ibuf, "%02X ", ptr[i]); ibuf += 3; } for (i = len2; i < 16; i++) { sprintf(ibuf, " "); ibuf += 3; } sprintf(ibuf, " "); ibuf += 2; for (i = 0; i < len2; i++) { sprintf(ibuf, "%c", BIN2CHAR(ptr[i])); ibuf += 1; } sprintf(ibuf, "\r\n"); printf("%s", membuf); }

显示效果如下;

最新回复(0)