[英]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.