我有一个结构,指向一个结构的指针,我希望将前 n 个字节打印为一个长十六进制数,或者打印为一个十六进制字节的字符串。
本质上,我需要 printf 等同于 gdb 的检查内存命令 x/nxb 。
如果可能的话,我仍然希望将 printf 用作程序的记录器函数,只是它的一个变体。如果我可以在不循环访问数据的情况下这样做,那就更好了。
最佳答案
只是采纳了 Eric Postpischil 的建议并编写了以下内容:
struct mystruc
{
int a;
char b;
float c;
};
int main(int argc, char** argv)
{
struct mystruc structVar={5,'a',3.9};
struct mystruc* strucPtr=&structVar;
unsigned char* charPtr=(unsigned char*)strucPtr;
int i;
printf("structure size : %zu bytes\n",sizeof(struct mystruc));
for(i=0;i<sizeof(struct mystruc);i++)
printf("%02x ",charPtr[i]);
return 0;
}
它会在结构拉伸(stretch)时尽可能快地打印字节。
更新:感谢 Eric 的洞察力 :) 我已经更新了代码。
关于c - printf 原始数据到固定长度的十六进制输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11992677/