簡體   English   中英

fread 和 fwrite 扭曲文件二進制

[英]fread and fwrite distort file binary

我正在嘗試編寫一個程序來創建一個固定大小的 .bmp。 為此,我試圖在每個文件的開頭放置一個集頭。 但是,每當我這樣做時,字節似乎都會失真。 取而代之的是:

00000000  42 4d 7e c0 02 00 00 00  00 00 7e 00 00 00 6c 00  |BM~.......~...l.|
00000010  00 00 80 05 00 00 00 04  00 00 01 00 01 00 00 00  |................|
00000020  00 00 00 c0 02 00 13 0b  00 00 13 0b 00 00 01 00  |................|
00000030  00 00 01 00 00 00 42 47  52 73 00 00 00 00 00 00  |......BGRs......|
00000040  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000060  00 00 00 00 00 00 00 00  00 00 02 00 00 00 00 00  |................|
00000070  00 00 00 00 00 00 00 00  00 00 ff ff ff 00        |..............|
0000007e

我得到這個:

00000000  46 1d b3 1b 00 00 00 00  16 72 fd 55 00 00 00 00  |F........r.U....|
00000010  21 00 16 35 00 00 00 00  16 72 fd 55 00 00 00 00  |!..5.....r.U....|
00000020  21 00 16 35 00 00 00 00  00 00 00 00 00 00 00 00  |!..5............|
00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000040  40 52 69 01 00 00 00 00  a0 f7 f4 c4 fe 7f 00 00  |@Ri.............|
00000050  fa 0a 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000060  fa 0a 00 00 00 00 00 00  e9 67 a5 ad d8 7f 00 00  |.........g......|
00000070  40 f7 f4 c4 fe 7f 00 00  2e 07 40 00 00 00        |@.........@...|
0000007e

這是我正在使用的代碼:

void basecopy() {              
  FILE *base, *test;

  base = fopen("base.bmp", "r");  //.bmp template
  test = fopen("test.bmp", "w");  //file to be copied to

  fseek(base, 0, SEEK_END);
  int size = ftell(base);
  fseek(base, 0, SEEK_SET);

  char buf[size];

  fwrite(buf, sizeof(char), size, test);
}

這是怎么回事?

您的代碼永遠不會調用fread來讀取輸入數據。 因此,您正在寫垃圾。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM