簡體   English   中英

以十六進制打印數據結構值

[英]printing of a Data struct values in hex

typedef struct AbcStruct{

   short        LD;
   short        EL;
   short        CL;        
   AbcStruct( short b, short res = 0, short lr = 1000): LD( b ), EL(res), CL( lr ) { }
};

int main () 
{

    struct AbcStruct A2(200, 100, 100);

    char *string_ptr = (char *)&A2;
    kk = sizeof(AbcStruct);

    while(kk--)
        printf(" %x ", *string_ptr++);
}

輸出(十六進制的AbcStruct):

ffffffc8  0  64  0  64  0

我想知道為什么第一個元素的輸出包含4個字節: ffffffc8當我期望它只會打印c8

謝謝

這樣做是因為您要打印的char的第一位是1 ,因此char被解釋為負數。 當您使用默認的%x格式進行打印時,要打印的值被解釋為一個int (比char大得多)。 因此,符號被復制到所有其他位置,使您在輸出中看到那些f s。

一種解決方法是使用%hhx進行打印(您告訴printf您正在打印unsigned char值)。

printf(" %hhx ", *string_ptr++);

另一個解決方法是將string_ptr的類型更改為unsigned char

unsigned char *string_ptr = (char *)&A2;

或者,您可以將它們合並。

您要告訴printf()string_ptr指向的地址返回的string_ptr視為unsigned int (我猜它在系統上為32位長),而不是unsigned char

嘗試這個:

unsigned char *string_ptr = (unsigned char *)&A2;
kk = sizeof(AbcStruct);
while(kk--)
{
    unsigned char c = *string_ptr++;
    printf(" %x ", (unsigned)c);
}

在printf格式說明符中使用width選項可根據需要打印盡可能多的地址字符。 例如,在這里您可以使用%2X作為格式說明符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM