我有一個結構,以及指針結構,我希望給printf前n個字節作爲一個長十六進制數,或作爲十六進制字節串。printf的原始數據爲固定長度的十六進制輸出
基本上我需要的printf相當於廣發行的檢查存儲器的命令,X/NXB。
如果可能的話,我想還是用printf作爲節目的記錄功能只是它的變體。更好的是,如果我可以這樣做而不循環數據。
我有一個結構,以及指針結構,我希望給printf前n個字節作爲一個長十六進制數,或作爲十六進制字節串。printf的原始數據爲固定長度的十六進制輸出
基本上我需要的printf相當於廣發行的檢查存儲器的命令,X/NXB。
如果可能的話,我想還是用printf作爲節目的記錄功能只是它的變體。更好的是,如果我可以這樣做而不循環數據。
剛接手埃裏克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的結構延伸。
更新:您的洞察力埃裏克:)我已經更新了代碼感謝。
試試這個。假設你有指向pstruct
中的struct的指針。
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 *
和(具有帶64個參數的printf
或使用循環)。
尺寸應打印爲「%zu」。這是無符號'size_t'類型的格式,它可能與「%d」的簽名'int'類型不同。最好打印帶有「%02x」而不是「%x」的字節。如果值足夠小,後者只打印一位數字。 – 2012-08-16 18:45:02