2011-12-31 70 views
0

可能重複:
Why does C print my hex values incorrectly?爲什麼fwrite向後打印十六進制值?

我fwrite的輸出信息到一個二進制文件,但是當我看它在XXD輸出爲十六進制是不是爲了。這是二進制文件應該看起來如何?

代碼打印到目的地:

int delim[] = { 0xabcd1234 }; 
    fwrite(delim, 4, 1, destination); 
    char buffer[] = "I like dog"; 
    fwrite(buffer, 1, 10, destination); 

XXD輸出:

0000000: 3412 cdab 4920 6c69 6b65 2064 6f67  4...I like dog 

正如你所看到的十六進制數爲3412 CDAB而不是ABCD1234

回答

4

因爲那是怎樣你的處理器顯然存儲整數。

更多關於這對維基百科 - Endianness

+1

它不是操作系統,而是強制執行字節序處理器。 – 2011-12-31 19:07:49

+0

@AlanHaggaiAlavi這就是它說的:-) – 2011-12-31 19:08:21

+0

但是,編輯之前,情況並非如此。 :-) – 2011-12-31 19:11:33

0

它是由處理器存儲整數的小端方式。

3

正如Tom van der Woredt指出的那樣,這是一個排序問題(可能是xxd的問題,使其轉儲單個字節,而不是雙重)。

如果你想確保十六進制是按照特定的順序在該文件中,使用的無符號字符數組,而不是:

unsigned char delim[] = {0xab, 0xcd, 0x12, 0x34}; 
fwrite(delim, sizeof *delim, sizeof delim, destination);