2013-08-22 27 views
0

下面的代碼讓我在不同的系統不同的輸出易位:字節寫入文件被在某些平臺上

int fd = open(filename, O_RDWR | O_CREAT, S_IRWXU | S_IRWXG | S_IRWXO); 
byte_t data[] = { 0x00, 0x01, 0x02, 0x03, 0x0a, 0x0b 0x0c, 0x0d }; 

write(fd, data, sizeof(data)); 

在Mac上一個文件名的「hexdump都」給我期望

00 01 02 03 0a 0b 0c 0d 

在Ubuntu和Windows(代碼是不同的,但效果是一樣的),你會得到

01 00 03 02 0b 0a 0d 0c 

我想要平臺打印

00 01 02 03 0a 0b 0c 0d 

那麼我該如何繼續?

+0

是「byte_t」跨兩個平臺的一致數據類型嗎? –

+2

「代碼不同」?請向我們展示* actual *代碼,而不是一些近似值。 – NPE

+3

我認爲你所展示的代碼會以你在任何*平臺上描述的方式行事(不管字節順序等),這是不太可能的。請包括一個SSCCE(http://sscce.org/)。 – NPE

回答

1

它看起來像hexdump實用程序交換字節。請顯示您在每個平臺中使用的hexdump命令。

要使用

byte_t data[] = { 'a', 'b', 'c', 'd', 'e' } 

確認,測試並比較hexdump都和貓(或類型)的輸出。

+0

我用xxd測試了我的輸出和數據按正確的順序打印出來。 Hexdump仍然顯示反向的字節。我認爲你是對的,這只是hexdump在某些平臺上的行爲而不是寫入字節的數據交換。 – user1660675

+0

你使用'hexdump'的選項是什麼? –

+0

我沒有使用任何選項(也許我應該有)。文件被命名爲mywave.wav,所以我寫道: hexdump mywave.wav – user1660675