我有一个结构体,指向一个结构体的指针,我希望将前 n 个字节打印为一个长十六进制数,或一个十六进制字节字符串。
本质上,我需要与 gdb 的检查内存命令 x/nxb 等效的 printf 。
如果可能的话,我想仍然使用 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;
}
它将在结构伸展时尽可能快地打印字节。
更新:感谢 Eric 的洞察力 :) 我已经更新了代码。
试试这个。假设您有指向 struct in 的指针pstruct
。
unsigned long long *aslong = (unsigned long long *)pstruct;
printf("%08x%08x%08x%08x%08x%08x%08x%08x",
aslong[0],
aslong[1],
aslong[2],
aslong[3],
aslong[4],
aslong[5],
aslong[6],
aslong[7],
);
正如 Eric 指出的那样,这可能会乱序打印字节。所以要么是这个,要么是使用unsigned char *
and(有printf
64个参数或使用循环)。