2012-09-11 83 views

回答

5

這是怎麼回事?

void print_bytes(void *p, size_t len) 
{ 
    size_t i; 
    printf("("); 
    for (i = 0; i < len; ++i) 
     printf("%02X", ((unsigned char*)p)[i]); 
    printf(")"); 
} 

void print_short(short x) 
{ 
    print_bytes(&x, sizeof(x)); 
} 

void print_double(double x) 
{ 
    print_bytes(&x, sizeof(x)); 
} 
//etc. 

這將打印形成值的字節,以十六進制表示,每個字節兩個字符。

例如,在小端機器中,print_short(42)將打印(2A00)。在大端機器中,它將是(002A)

2

沒有直接的方法(即使用printf或其他標準庫函數)來打印它。你將不得不編寫你自己的功能。

void printbits(unsigned int v) { 
    for (; v; v >>= 1) 
     putchar('0' + (v & 1)); 
} 
1

如果你想看看它是如何在內存中組織(體系結構相關的):

short val = 0x1234; 
printf("%02x%02x", ((char*)&val)[0], ((char*)&val)[1]); 

如果你只是想看看它是怎麼寫的(大型):

printf("%04x", val); 
+1

但是請注意,如果'char'被簽名(並且它在許多體系結構中),並且字節如果大於0x80,則會得到一些有趣的值。 – rodrigo