私は構造体を持っていて、構造体へのポインターを持っています。最初の n バイトを長い 16 進数または 16 進バイトの文字列として出力したいと考えています。
基本的に、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;
}
構造が伸びるにつれて、バイトをfasとして出力します。
更新:洞察に感謝しますEric:)コードを更新しました。
これを試して。に構造体へのポインタがあるとし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 個の引数を持つ a またはループの使用) のいずれかです。