[英]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.