2017-06-01 48 views
0

我已經通過使用下面的c程序創建了用遞增數字填充的二進制映像。字節在使用fwrite創建映像後交換

#include <stdio.h> 
#include <stdlib.h> 

int main (int argc, char *argv[]) 
{ 
     FILE *w_file; 
     long cnt = 0, buf_cnt = 0,pn_cnt = 0x0; 
     char buffer[4194305]; 


     w_file = fopen ("test.img" , "wb"); 
     if (w_file==NULL) 
     { 
       perror("File error"); 
       return -1; 
     } 
     for (cnt = 0; cnt < (4096*1024); cnt++) 
     { 
       buffer[cnt] = cnt; 
     } 

     fwrite(buffer, 4096, 1024, w_file); 

     fclose (w_file); 
     return 0; 

} 

但是,當我檢查與hexdump都的形象,我發現所有的字節交換。爲什麼會發生? hexdump都的

樣本屏幕截圖:

0000000 0100 0302 0504 0706 0908 0b0a 0d0c 0f0e 
0000010 1110 1312 1514 1716 1918 1b1a 1d1c 1f1e 
0000020 2120 2322 2524 2726 2928 2b2a 2d2c 2f2e 
0000030 3130 3332 3534 3736 3938 3b3a 3d3c 3f3e 
0000040 4140 4342 4544 4746 4948 4b4a 4d4c 4f4e 
0000050 5150 5352 5554 5756 5958 5b5a 5d5c 5f5e 
0000060 6160 6362 6564 6766 6968 6b6a 6d6c 6f6e 
0000070 7170 7372 7574 7776 7978 7b7a 7d7c 7f7e 
0000080 8180 8382 8584 8786 8988 8b8a 8d8c 8f8e 
0000090 9190 9392 9594 9796 9998 9b9a 9d9c 9f9e 
00000a0 a1a0 a3a2 a5a4 a7a6 a9a8 abaa adac afae 
00000b0 b1b0 b3b2 b5b4 b7b6 b9b8 bbba bdbc bfbe 
00000c0 c1c0 c3c2 c5c4 c7c6 c9c8 cbca cdcc cfce 
+0

確定嗎?因爲當我運行這個代碼並運行'xxd -l 16 test.img'時,它輸出'00000000:0001 0203 0405 0607 0809 0a0b 0c0d 0e0f ................' – Cornstalks

+0

由方式來說,main的有效返回值通常是0(成功)和1到127(失敗)。除此之外,如-1,不是很好的做法。 –

+0

無關:'char buffer [4194305];'很醜。你爲什麼不寫'char buffer [4096 * 1024];'? –

回答

2

hexdump都顯示當交換字節。

hexdump confusion

如果使用hexdump -C ...,你很可能會得到預期的結果。

+0

Hexdump只提供不同的視圖。 YOu混淆因果關係。 – Olaf